我正在學習bash腳本。 我從網絡上獲得了下面的示例腳本。bash腳本中的字符串比較
#!/bin/bash
str="test"
if [ x$str == x"test" ]; then
echo "hello!"
fi
什麼是第五行(x$str
和x"test"
)X? 「x
」有特殊含義嗎?
我正在學習bash腳本。 我從網絡上獲得了下面的示例腳本。bash腳本中的字符串比較
#!/bin/bash
str="test"
if [ x$str == x"test" ]; then
echo "hello!"
fi
什麼是第五行(x$str
和x"test"
)X? 「x
」有特殊含義嗎?
這是爲了確保您的示例中表達式的左側不是空的。如果str
未設置,則該條件將爲[ == "test" ]
,這會產生錯誤。
而不是使用單個字母使其不爲空,也可以將變量放在雙引號字符中,並完全跳過x
([ "$str" == "test" ]
)。
沒有特殊含義,但如果$str
是空的,那麼
if [ $str == "test" ]
將導致替代的什麼到測試,它會是這樣
if [ == "test" ]
這將是一個語法錯誤。在前面添加X可以解決這個問題,但是像這樣引用它
if [ "$str" == "test" ]
是一種更易於理解的實現方法。
看起來這個例子來自用於測試新的bash編譯的測試用例,只有前面的x方法發現的參考文獻爭辯說「」方法更好,測試用例是否應該更改。 – ewanm89
什麼是更好的問題 - 我已經看到了x方法的一些地方,並且我確定在管道或深度替換中有地方會使代碼更具可讀性 - 但是對於像這樣的簡單情況在上面,「」直觀地被理解並且永遠不會提出問題。 – Soren
是的,我沒有說這是我的觀點,我說這是GNU bash郵件列表上的爭論。 – ewanm89