• 本页内容

18. 获取参数范围


正如您所知,$@$*给出传递给 shell 脚本的所有参数。 但是,如果您只想获取一系列参数(而不使用 $1$2$3 等显式调用它们),则可以使用此处显示的方法。

${@:$start:$count}
  • $start - 是要从中提取的参数的起始位置。 当$start为负数时,起始位置从末尾开始计算,即起始值为 3 表示从第三个参数开始,起始值为 -3 表示从倒数第三个参数开始。
  • $count - 指示从$start位置提取多少个参数。 这是可选的。 当您不提供$count时,bash 将从$start中提取所有剩余的参数。

参数提取示例:

$ cat args3.sh
echo "\$@ = $@"
start=2
count=3
echo "\${@:2} = ${@:$start}"
echo "\${@:2:3} = ${@:$start:$count}"
start=-4
echo "\${@:-4} = ${@:$start}"
echo "\${@:-4:3} = ${@:$start:$count}"
echo "Looping range of arguments"
for i in "${@:$start:$count}"
do
    echo "$i"
done

$ ./args3.sh 1 2 3 4 5 6
$@ = 1 2 3 4 5 6
${@:2} = 2 3 4 5 6
${@:2:3} = 2 3 4
${@:-4} = 3 4 5 6
${@:-4:3} = 3 4 5
Looping range of arguments
3
4
5

注意:在上面的例子中,您可以将@替换为*以获得相同的结果。