簡體   English   中英

在 if 語句中執行代碼 (Bash)

[英]Executing code in if-statement (Bash)

新問題:

我不能這樣做(錯誤: line 2: [: ==: unary operator expected ):

if [ $(echo "") == "" ]
then
    echo "Success!"
fi

但這很好用:

tmp=$(echo "")
if [ "$tmp" == "" ]
then
    echo "Success!"
fi

為什么?

原始問題:

是否可以在 if 語句中獲取命令的結果?

我想做這樣的事情:

if [ $(echo "foo") == "foo" ]
then
    echo "Success!"
fi

我目前使用這種解決方法:

tmp=$(echo "foo")
if [ "$tmp" == "foo" ]
then
    echo "Success!"
fi

簡短的回答是肯定的——您可以在if條件內評估命令。 在您的第一個示例中,我唯一要更改的是引用:

if [ "$(echo foo)" == "foo" ]
then 
    echo "Success"'!'
fi
  • 請注意'!'的有趣引用 . 這會禁用 ! 的特殊行為! 在交互式 bash session 中,這可能會給您帶來意想不到的結果。

更新后,您的問題變得清晰,並且引用的更改實際上解決了它:

$(...)的評估發生在if [...]的評估之前,因此如果$(...)評估為空字符串,則[...]變為if [ == ""]即非法語法。

解決這個問題的方法是在$(...)表達式之外加上引號。 這是您可能會遇到引用內部引用的棘手問題的地方,但我將把這個問題放在另一個問題上。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM