4

在 bash 中,我可以遍历所有参数 $@。有没有办法获取当前参数的索引?(以便我可以参考下一个或上一个。)

4

3 回答 3

6

您可以遍历参数编号,并使用间接扩展 ( ${!argnum}) 从中获取参数:

for ((i=1; i<=$#; i++)); do
    next=$((i+1))
    prev=$((i-1))
    echo "Arg #$i='${!i}', prev='${!prev}', next='${!next}'"
done

请注意,$0( 的“前一个”参数$1)将类似于“-bash”,而最后一个之后的“下一个”参数将显示为空白。

于 2013-03-29T04:36:33.547 回答
6

与您指定的不完全一样,但您可以通过多种不同的方式迭代参数。

例如:

while test $# -gt 0
do
    echo $1
    shift
done
于 2013-03-29T03:00:39.037 回答
5

将位置参数复制到数组非常简单:

$ set -- a b c d e    # set some positional parameters
$ args=("$@")         # copy them into an array
$ echo ${args[1]}     # as we see, it's zero-based indexing
b

并且,迭代:

$ for ((i=0; i<${#args[@]}; i++)); do
    echo "$i  ${args[i]}  ${args[i-1]}  ${args[i+1]}"
  done
0  a  e  b
1  b  a  c
2  c  b  d
3  d  c  e
4  e  d  
于 2013-03-29T04:07:32.007 回答