我想做这样的事情:
if [ (! true) -o true ]
then
echo "Success!"
else
echo "Fail!"
fi
Run Code Online (Sandbox Code Playgroud)
但它会引发错误(-bash: syntax error near unexpected token '!'
)
有可能做这样的事吗?
这里的问题是[
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
这里).
你不能这样做,但你可以这样做:
if [ ! true ] || [ true ]
Run Code Online (Sandbox Code Playgroud)
作为一般规则,切勿尝试使用-a
或-o
选项[
。