解決 Bash 中的一元運算子預期錯誤

Yahya Irmak 2024年2月15日
解決 Bash 中的一元運算子預期錯誤

在 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 命令再次執行該檔案以對其進行除錯。

輸出:

bash 中預期的一元運算子

如你所見,等式左側沒有值,這會導致錯誤。

如果將變數寫在雙引號中,則不會出現此錯誤。因為現在比較操作會變成'' = 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 avatar Yahya Irmak avatar

Yahya Irmak has experience in full stack technologies such as Java, Spring Boot, JavaScript, CSS, HTML.

LinkedIn

相關文章 - Bash Operator

相關文章 - Bash Error