bash - 在 Bash shell 脚本中使用复合条件

标签 bash shell comparison

我想在 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

会将变量的内容作为命令执行,并根据命令的退出值执行条件操作(如果内容不是有效命令,则给出“未找到命令”消息)。

if (($true)) 

if ((true)) 做同样的事情如上所述。

关于bash - 在 Bash shell 脚本中使用复合条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4812257/

相关文章:

c# - 多个变量之间的相等比较

c++ - 有效地找到最小值和最大值

bash - cron 作业-ack : command not found

linux - 查找文件之间的公共(public)列位置

android - 使用 adb 卸载多个 android 包

Linux bash sleep 如果命令执行速度很快

linux - 杀死端口的 Bash 脚本

oop - 初学者 OOP 问题

linux - 为什么linux shell中带大括号的 `{cat,filename}` Group命令可以运行?

perl - 使用 bash shell 自动中断由关键字分隔的千兆字节行的最快方法是什么?