我studyng擊,而我看到的形式哪種形式更適合在Bash中使用?
C=example
echo "$C"
給予形式相同的結果
C="example"
echo $C
我想知道,如果是最好把「」在中賦值的變量或$之後。或者如果它無動於衷。或者如果有人認爲「比其他人更漂亮」。
我studyng擊,而我看到的形式哪種形式更適合在Bash中使用?
C=example
echo "$C"
給予形式相同的結果
C="example"
echo $C
我想知道,如果是最好把「」在中賦值的變量或$之後。或者如果它無動於衷。或者如果有人認爲「比其他人更漂亮」。
如果您確定某個變量的值是單個單詞(沒有空格),那麼可以使用$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
。
如果它是一個單詞的常量,則無關緊要。
但是,您應該閱讀關於這兩種引用。試試this article和這個documentation。還有一個SO question。
當字符串包含空格字符時,它很重要。如果沒有引號,空格字符將被視爲令牌分隔符,並且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"
嘗試用空格一個真實的例子。字符串example
根本不需要任何引用。因此,創建一個名爲This is an example.txt
,然後重試文件。替代品echo
和ls
...
是的。如果我使用我發佈的第一個表單,我有一個錯誤。在第二種方式中,他似乎認識到空白。感謝您的實際解釋。 – Kyrol
我建議無處不在。特別是使用變量時。 –
約引號和文字劈裂一個很好的文檔:「使用更多行情」
他們至關重要。另外,瞭解'
和"
和`之間的區別。請參閱從IRC freenode的#bash http://mywiki.wooledge.org/Quotes和http://wiki.bash-hackers.org/syntax/words
greybot樣品是否正在與世界=)
我覺得最好的做法是使用報價無處不在!有時是不需要的,但imho它更具可讀性。 – uzsolt
是的,我看到「」和「」的區別。 – Kyrol
感謝您的文章! – Kyrol
«引用的基礎很簡單,當值包含空格時使用單引號或雙引號。 » – Kyrol