如何在Bash的括号中使用not(!)?

时间:2011-05-28 18:44:13

标签: bash if-statement

我想做这样的事情:

if [ (! true) -o true ]
then
    echo "Success!"
else
    echo "Fail!"
fi

但它会抛出错误(-bash: syntax error near unexpected token '!'

有可能做这样的事吗?

2 个答案:

答案 0 :(得分:5)

这里的问题是[是bash中的一个简单的buildtin命令(写test的另一种方式),它只能解释它获得的任何参数,而(是一个运算符字符。在执行命令之前解析运算符。

要将()[一起使用,您必须引用它们:

if [ \( ! true \) -o true ]
then
    echo "Success!"
else
    echo "Fail!"
fi

if [ '(' ! true ')' -o true ]
then
    echo "Success!"
else
    echo "Fail!"
fi

[[ ... ]]构造是一种特殊的句法结构,它没有常规命令的语法限制,因为它在另一个层面上工作。因此,在这里你不需要引用你的括号,就像伊格纳西奥说的那样。 (此外,您必须在此处使用&&||代替-a-o。)

答案 1 :(得分:3)

你做不到,但你可以这样做:

if [ ! true ] || [ true ]

作为一般规则,请勿尝试将-a-o选项用于[