2011-11-27 30 views
3

我studyng擊,而我看到的形式哪種形式更適合在Bash中使用?

C=example

echo "$C"

給予形式相同的結果

C="example"

echo $C

我想知道,如果是最好把「」在中賦值的變量或$之後。或者如果它無動於衷。或者如果有人認爲「比其他人更漂亮」。

回答

5

如果您確定某個變量的值是單個單詞(沒有空格),那麼可以使用$varname${varname}。如果不能保證這一點,那麼你應該使用"$varname""${varname}"。需要注意的是bash所做的單詞拆分解釋你的命令,所以你實際上可能得​​到一個語法錯誤,如果你不報的表達,例如

C="white space" 
if [ -z $C ] 
then 
    ... 
fi 

將導致語法錯誤之前:

-bash: [: white: binary operator expected 

而這工作得很好:

C="white space" 
if [ -z "$C" ] 
then 
    ... 
fi 

這是由於第一,不帶引號的情況下,bash的變量擴展在事後看到這個:

if [ -z white space ] 
then 
    ... 
fi 

-z運營商期望只有一個,不是兩個參數。在第二個引用的案例bash看到這個:

if [ -z "white space" ] 
then 
    ... 
fi 

即根據需要只是一個參數。還需要注意的是報價是在分配

C="white space" 

使用,因爲它也會如果你寫

C=white space 

產生一個錯誤,因爲這將意味着:執行與含有添加變量C=white環境命令space

因此,一般而言,您應該引用這些表達式以確保您的代碼對不可預見的變量值更健壯。如果變量值來自輸入,文件等,則尤其如此。通常可以放棄整數變量的引號,或者當您只想顯示變量的值時,如echo $C

1

如果它是一個單詞的常量,則無關緊要。

但是,您應該閱讀關於這兩種引用。試試this article和這個documentation。還有一個SO question

+0

是的,我看到「」和「」的區別。 – Kyrol

+0

感謝您的文章! – Kyrol

+0

«引用的基礎很簡單,當值包含空格時使用單引號或雙引號。 » – Kyrol

4

當字符串包含空格字符時,它很重要。如果沒有引號,空格字符將被視爲令牌分隔符,並且bash會嘗試將替換的字符串解釋爲表達式。

當您不打算將變量評估爲表達式的一部分時,務必將引號放在安全的位置。

想象一下,你從「榜樣」輸入更改爲「兩個詞」,那麼你可以在執行腳本時遇到奇怪的行爲,甚至語法錯誤,如果你忽略了上面。

換句話說,

C="abc def" 
# the echo command receives one argument: "abc def" 
echo "$C" 
# echo receives two arguments: "abc" and "def" 
echo $C 
# bash tries to execute the program "abc" with a first argument "def" 
$C 
# bash tries to execute the program "abc def" 
"$C" 
0

嘗試用空格一個真實的例子。字符串example根本不需要任何引用。因此,創建一個名爲This is an example.txt,然後重試文件。替代品echols ...

+0

是的。如果我使用我發佈的第一個表單,我有一個錯誤。在第二種方式中,他似乎認識到空白。感謝您的實際解釋。 – Kyrol

+0

我建議無處不在。特別是使用變量時。 –

2

約引號和文字劈裂一個很好的文檔:「使用更多行情」

他們至關重要。另外,瞭解'"和`之間的區別。請參閱從IRC freenode的#bash http://mywiki.wooledge.org/Quoteshttp://wiki.bash-hackers.org/syntax/words

greybot樣品是否正在與世界=)

+0

我覺得最好的做法是使用報價無處不在!有時是不需要的,但imho它更具可讀性。 – uzsolt