2012-04-30 122 views

回答

7

$var${var},並有不同之處在於"$var""${var}"沒有什麼區別,在某些情況下,解析器可能無法識別您的意圖,當你的用戶以前的版本沒有什麼區別。試想一下:

foo=hello 
echo "$fooworld" 
echo "${foo}world" 

第一echo打印什麼,因爲變量fooworld沒有定義。第二個打印helloworld,因爲shell能夠確定您引用foo變量。

$var"$var"之間的區別在於,擴展之後,shell對未加引號的變量擴展進行評估。作爲這樣:

var='ls /' 
$var 

解釋/,由於膨脹後的殼的計算結果的空間作爲令牌分離器,而在ls /: No such file or directory

var='ls /' 
"$var" 

結果,因爲沒有名爲ls /命令是在用戶的環境中使用。

+0

感謝您的解釋。 – E1Suave

2

引號中的那些被擴展爲一個參數,而不是分成單獨的單詞。

如果下一個字符可能是變量名的一部分,則${var}表示法很有用,例如:"${var}name"

function args() { 
    while [ $# -gt 0 ]; do echo "arg: '$1'"; shift; done 
} 

# var=" a b c" 

# args $var 
arg: 'a' 
arg: 'b' 
arg: 'c' 

# args "$var" 
arg: ' a b c' 
+0

在任何時候都使用** $ {var} **符號不合適嗎?這是否會導致問題,或取決於變量是否是命令E.g. ** var = $(echo hi)**或者變量是簡單字符串E.g ** var =「hi」**? – E1Suave

+0

「變量是一個命令」 - 你的意思是變量被設置爲包含命令的*輸出*?不,沒有區別。它只是一個變量 –

+0

使用'$ {var}'形式總是合適的,除非你認爲它會傷害可讀性。 – Sorpigal