2011-11-05 141 views
6

我正在學習bash腳本。 我從網絡上獲得了下面的示例腳本。bash腳本中的字符串比較

#!/bin/bash 

str="test" 

if [ x$str == x"test" ]; then 
    echo "hello!" 
fi 

什麼是第五行(x$strx"test")X? 「x」有特殊含義嗎?

回答

2

這是爲了確保您的示例中表達式的左側不是空的。如果str未設置,則該條件將爲[ == "test" ],這會產生錯誤。

而不是使用單個字母使其不爲空,也可以將變量放在雙引號字符中,並完全跳過x[ "$str" == "test" ])。

9

沒有特殊含義,但如果$str是空的,那麼

if [ $str == "test" ] 

將導致替代的什麼到測試,它會是這樣

if [ == "test" ] 

這將是一個語法錯誤。在前面添加X可以解決這個問題,但是像這樣引用它

if [ "$str" == "test" ] 

是一種更易於理解的實現方法。

+0

看起來這個例子來自用於測試新的bash編譯的測試用例,只有前面的x方法發現的參考文獻爭辯說「」方法更好,測試用例是否應該更改。 – ewanm89

+0

什麼是更好的問題 - 我已經看到了x方法的一些地方,並且我確定在管道或深度替換中有地方會使代碼更具可讀性 - 但是對於像這樣的簡單情況在上面,「」直觀地被理解並且永遠不會提出問題。 – Soren

+0

是的,我沒有說這是我的觀點,我說這是GNU bash郵件列表上的爭論。 – ewanm89