我不能这样做(错误: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
答案 0 :(得分:6)
简短的回答是是 - 您可以评估if
条件内的命令。我在第一个例子中唯一要改变的是引用:
if [ "$(echo foo)" == "foo" ]
then
echo "Success"'!'
fi
'!'
的有趣引用。这会禁用交互式bash会话中!
的特殊行为,这可能会为您带来意外结果。更新后,问题变得清晰,引用的变化实际上解决了它:
$(...)
的评估发生在评估if [...]
之前,因此如果$(...)
评估为空字符串[...]
变为if [ == ""]
这是非法语法
解决此问题的方法是在$(...)
表达式之外添加引号。这就是你可能会引用引用内引用的棘手问题,但我会将这个问题归结为另一个问题。