【发布时间】:2011-01-27 02:52:05
【问题描述】:
我想在 Bash 脚本中执行以下操作。如何在 Bash 语法中实现它?
if !((a==b) && (a==c))
then
# Do something
end if
【问题讨论】:
标签: bash shell comparison
我想在 Bash 脚本中执行以下操作。如何在 Bash 语法中实现它?
if !((a==b) && (a==c))
then
# Do something
end if
【问题讨论】:
标签: bash shell comparison
对于数值比较,你可以这样做:
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
将变量的内容作为命令执行,并根据命令的退出值执行条件操作(如果内容不是有效命令,则给出“未找到命令”消息)。
if (($true))
与上述if ((true)) 做同样的事情。
【讨论】:
if [ "$a" != "$b" -o "$a" != "$c" ]; then
# ...
else
# ...
fi
【讨论】:
if [ ! \\( \\( "$a" = "$b" \\) -a \\( "$a" = "$c" \\) \\) ]...
#!/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
从技术上讲,您不需要在子表达式周围加上括号,因为相等运算符 == != 的优先级高于复合比较运算符 && ||,但我认为将它们保留在其中以显示意图,如果没有别的。
【讨论】: