2014-11-22 78 views
0

我有一個bash腳本,其中很多functions處理腳本收到的所有參數。問題是,如果我使用myfunction [email protected]myfunction $*,包含空格字符的參數將被錯誤地解釋,所以我必須使用myfunction "$1" "$2" "$3" ...,這是不成熟的,並將參數數量限制爲9.是否有解決此問題的方法問題,也許通過某種方式收到參數global?或者是否有其他一些技巧可以使這成爲可能?bash腳本中的參數分組

回答

2

您可以使用引號來防止這種情況發生。

實例:

test() { 
    for i in "[email protected]" 
    do 
     echo "$i" 
    done 
} 

test "[email protected]" 

輸出:

$ ./test.sh foo "bar baz" 
foo 
bar baz 

沒有引號:

test() { 
    for i in $@ # no quotes 
    do 
     echo "$i" 
    done 
} 

test "[email protected]" 

輸出:

$ ./test.sh foo "bar baz" 
foo 
bar 
baz 

或者

test() { 
    for i in "[email protected]" 
    do 
     echo "$i" 
    done 
} 

test [email protected] # no quotes 

輸出:

$ ./test.sh foo "bar baz" 
foo 
bar 
baz 
+1

你不應該使用'function'關鍵字來定義的功能。你的函數應該定義爲'test(){...'。 – 2014-11-22 13:03:35

+0

你說得對。我編輯了我的答案。 – 2014-11-22 14:34:50