4

bash では、すべての引数 $@ をループできます。現在の引数のインデックスを取得する方法はありますか? (次のものまたは前のものを参照できるように。)

4

3 に答える 3

6

指定したとおりではありませんが、さまざまな方法で引数を反復処理できます。

例えば:

while test $# -gt 0
do
    echo $1
    shift
done
于 2013-03-29T03:00:39.037 に答える
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 に答える
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 に答える