在if语句中执行代码(Bash)

Tyi*_*ilo 5 bash if-statement

新问题:

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

if [ $(echo "") == "" ]
then
    echo "Success!"
fi
Run Code Online (Sandbox Code Playgroud)

但这很好用:

tmp=$(echo "")
if [ "$tmp" == "" ]
then
    echo "Success!"
fi
Run Code Online (Sandbox Code Playgroud)

为什么?

原始问题:

是否可以在if语句中获取命令的结果?

我想做这样的事情:

if [ $(echo "foo") == "foo" ]
then
    echo "Success!"
fi
Run Code Online (Sandbox Code Playgroud)

我目前使用这种解决方法:

tmp=$(echo "foo")
if [ "$tmp" == "foo" ]
then
    echo "Success!"
fi
Run Code Online (Sandbox Code Playgroud)

Che*_*evy 6

简短的回答是肯定的 - 您可以评估if条件内的命令.我在你的第一个例子中唯一要改变的是引用:

if [ "$(echo foo)" == "foo" ]
then 
    echo "Success"'!'
fi
Run Code Online (Sandbox Code Playgroud)
  • 请注意有趣的引用'!'.这会禁用!交互式bash会话内部的特殊行为,这可能会为您带来意外结果.

更新后,您的问题变得清晰,引用的更改实际上解决了它:

评估$(...)在评估之前发生if [...],因此如果$(...)评估为空字符串,则[...]变为if [ == ""]非法语法.

解决这个问题的方法是在$(...)表达式之外加上引号.这就是你可能会引用引用内引用的棘手问题,但我会将这个问题归结为另一个问题.