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

Tyi*_*ilo 6 bash if-statement

我想做这样的事情:

if [ (! true) -o true ]
then
    echo "Success!"
else
    echo "Fail!"
fi
Run Code Online (Sandbox Code Playgroud)

但它会引发错误(-bash: syntax error near unexpected token '!')

有可能做这样的事吗?

Paŭ*_*ann 5

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

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

if [ \( ! true \) -o true ]
then
    echo "Success!"
else
    echo "Fail!"
fi
Run Code Online (Sandbox Code Playgroud)

要么

if [ '(' ! true ')' -o true ]
then
    echo "Success!"
else
    echo "Fail!"
fi
Run Code Online (Sandbox Code Playgroud)

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


zwo*_*wol 3

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

if [ ! true ] || [ true ]
Run Code Online (Sandbox Code Playgroud)

作为一般规则,切勿尝试使用-a-o选项[