解決 Bash 中的一元運算子預期錯誤
Yahya Irmak
2024年2月15日
在 shell 指令碼中,一元運算子對單個運算元進行操作以返回一個新值。本文將解釋如何解決 Linux Bash 中的 [: =: unary operator expected
錯誤。
解決 Bash 中的 [: =: unary operator expected
錯誤
假設你的 bash 指令碼指定了一行包含不適用於兩個引數的二元運算子。Bash 假設你將使用一元運算子並得到 [: =: unary operator expected
錯誤。
我們將在本文的其餘部分詳細研究此錯誤的原因和解決方案。
讓我們將下面的 bash 指令碼儲存為 file.sh
並嘗試使用 bash file.sh
命令執行它。
命令:
#!/bin/bash
str=
if [ $str == "string" ]; then
echo "Go on!"
fi
程式碼將不會執行併產生錯誤。未分配的變數 "str"
與單方括號一起使用。
使用 bash -x file.sh
命令再次執行該檔案以對其進行除錯。
輸出:
如你所見,等式左側沒有值,這會導致錯誤。
如果將變數寫在雙引號中,則不會出現此錯誤。因為現在比較操作會變成'' = string
。
運算子兩邊都有值可確保程式碼正確執行。
命令:
#!/bin/bash
str=
if [ "$str" == "string" ]; then
echo "Go on!"
fi
解決錯誤的另一種方法是使用雙方括號。這樣比較操作也會是'' = string
。
命令:
#!/bin/bash
str=
if [[ $str == "string" ]]; then
echo "Go on!"
fi
如果要檢視變數是否為空,可以使用 -z
標誌而不是比較。 -z
標誌檢查變數的長度是否為零,如果為零則返回 true
。
命令:
#!/bin/bash
str=
if [ -z $str ]; then
echo "It is empty string"
fi
本文介紹一般解決方案。通過除錯程式碼,你可以找到導致錯誤的變數並按照說明進行解決。
作者: Yahya Irmak
Yahya Irmak has experience in full stack technologies such as Java, Spring Boot, JavaScript, CSS, HTML.
LinkedIn