[英]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.