我想在Bash脚本中实现以下功能。如何用Bash语法实现?
if !((a==b) && (a==c))
then
# Do something
end if
我想在Bash脚本中实现以下功能。如何用Bash语法实现?
if !((a==b) && (a==c))
then
# Do something
end if
对于数字比较,您可以这样做:
if ! (( (a == b) && (a == c) ))
用于字符串比较:
if ! [[ "$a" == "$b" && "$a" == "$c" ]]
在Bash中,双括号设置了一个算术上下文(顺便说一句,这里大部分情况下美元符号是可选的),用于比较(也用于for ((i=0; i<=10; i++))
和 $(())
算术展开),并且用于区分与创建子shell的一组单括号。例如,以下命令执行true
命令,并且由于它总是为真,因此它执行相应的操作。if (true); then echo hi; fi
这与之前的代码相同
if true; then echo hi; fi
除了创建一个子shell之外,没有什么不同。但是,if ((true))
测试名为"true"的变量的值。
如果你包含一个美元符号,那么"$true"就会无歧义地成为一个变量,但是用单括号(或者没有括号)的if
行为将会改变。
if ($true)
或者if $true
会执行变量的内容作为命令,并根据命令的退出值执行条件操作(如果内容不是有效命令,则显示“command not found”消息)。
if (($true))
与上述描述的if ((true))
执行相同的操作。
if [ "$a" != "$b" -o "$a" != "$c" ]; then
# ...
else
# ...
fi
if [ ! \\( \\( "$a" = "$b" \\) -a \\( "$a" = "$c" \\) \\) ]
... - Jonathan Leffler#!/bin/bash
a=2
b=3
c=4
if ! (( (a == b) && (a == c) )); then
# stuff here
fi
#!/bin/bash
a=2
b=3
c=4
if (( (a != b) || (a != c) )); then
# stuff here
fi
从技术上讲,在子表达式周围不需要括号,因为等式运算符== !=
的优先级高于复合比较运算符&& ||
,但我认为最好保留它们以显示意图。