我想做这样的事情:
if [ (! true) -o true ]
then
echo "Success!"
else
echo "Fail!"
fi
但它会抛出错误(-bash: syntax error near unexpected token '!'
)
有可能做这样的事吗?
答案 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
选项用于[
。