首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在if-statement (Bash)中执行代码

在if-statement (Bash)中执行代码
EN

Stack Overflow用户
提问于 2011-05-31 02:26:01
回答 1查看 6.8K关注 0票数 5

新问题:

我不能这样做(错误:line 2: [: ==: unary operator expected):

代码语言:javascript
复制
if [ $(echo "") == "" ]
then
    echo "Success!"
fi

但这很好用:

代码语言:javascript
复制
tmp=$(echo "")
if [ "$tmp" == "" ]
then
    echo "Success!"
fi

为什么?

原问题:

可以在if语句中获得命令的结果吗?

我想做这样的事情:

代码语言:javascript
复制
if [ $(echo "foo") == "foo" ]
then
    echo "Success!"
fi

我目前使用这个变通方法:

代码语言:javascript
复制
tmp=$(echo "foo")
if [ "$tmp" == "foo" ]
then
    echo "Success!"
fi
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-05-31 02:46:10

简短的回答是yes --您可以在if条件中计算命令。在您的第一个示例中,我唯一要更改的是引用:

代码语言:javascript
复制
if [ "$(echo foo)" == "foo" ]
then 
    echo "Success"'!'
fi

  • 注意到对'!'的有趣引用。这将在交互式bash会话中禁用!的特殊行为,这可能会为您产生意外的结果。

更新后,您的问题变得清晰,报价中的更改实际上解决了问题:

$(...)的求值发生在if [...]的求值之前,因此,如果$(...)的求值结果为空字符串,则[...]将变为if [ == ""],这是非法语法。

解决这个问题的方法是将引号放在$(...)表达式之外。这就是你可能会遇到内部引用的棘手问题,但我将把这个问题转移到另一个问题上。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6179570

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档