新问题:
我不能这样做(错误: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发布于 2011-05-31 02:46:10
简短的回答是yes --您可以在if条件中计算命令。在您的第一个示例中,我唯一要更改的是引用:
if [ "$(echo foo)" == "foo" ]
then
echo "Success"'!'
fi'!'的有趣引用。这将在交互式bash会话中禁用!的特殊行为,这可能会为您产生意外的结果。更新后,您的问题变得清晰,报价中的更改实际上解决了问题:
$(...)的求值发生在if [...]的求值之前,因此,如果$(...)的求值结果为空字符串,则[...]将变为if [ == ""],这是非法语法。
解决这个问题的方法是将引号放在$(...)表达式之外。这就是你可能会遇到内部引用的棘手问题,但我将把这个问题转移到另一个问题上。
https://stackoverflow.com/questions/6179570
复制相似问题