2014-01-08 20 views
0

我有一個劇本叫hello.sh,我調用它是這樣的:

./hello.sh yes no sure why how 

我想前兩個參數後打印所有參數:sure why how

代碼:

for ((i = 3; i <= $#; i++)); 
do 
    echo "$i" 
done 

但不是sure why how,它打印1 2 3

如何打印參數而不是索引?

+0

可以捕捉到如果你需要它們的前兩個參數('arg1 =「$ 1」; arg2 =「$ 2」'),然後使用「shift 2」丟失它們,所以參數3-N在'「$ @」'? –

+0

這是什麼腳本語言?它似乎不是有效的代碼。那些雙括號看起來很奇怪。 –

回答

0

這是因爲你正在呼應$i而不是位置$i處的參數。嘗試:

args=("[email protected]") 

for ((i = 3; i <= $#; i++)); do 
    echo ${args[$i]} 
done 
2

這個怎麼樣更簡單,更簡單的方法,而不數組:如果你實際上不會使用這些值以後

arg1="$1" arg2="$2" # save $1 and $2 

shift 2 

for i; do 
    echo "$i" 
done 

第一行不是必需的。

UPDATE

或者作爲@chepner指出的那樣,如果你使用bash,並且要避免修改[email protected]shift,你可以這樣做:

arg1="$1" arg2="$2" # save $1 and $2 

for i in ${@:3}; do 
    echo "$i" 
done 
+1

基於使用C風格的for-loop,OP可能使用'bash'。在這種情況下,可以在$ {@:3}中使用'for i;做'以避免用'shift'修改'$ @'。 – chepner

+0

不錯,謝謝,我添加到我的答案;-) – janos