2013-03-29 84 views
2

在bash中,我可以遍歷所有參數$ @。 有沒有辦法獲得當前參數的索引? (所以我可以參考下一個或前一個)。在bash中循環參數

回答

5

與您指定的不完全相同,但您可以通過多種不同的方式遍歷參數。

例如:

while test $# -gt 0 
do 
    echo $1 
    shift 
done 
3

很簡單的位置PARAMS複製到一個數組:

$ set -- a b c d e # set some positional parameters 
$ args=("[email protected]")   # 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 
3

你也可以遍歷與參數編號,並使用間接擴展(${!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」,而在最後的「下一步」的說法會出來空白。