Для числового сравнения вы можете сделать:
if ! (( (a == b) && (a == c) ))
Для сравнения строк:
if ! [[ "$a" == "$b" && "$a" == "$c" ]]
В Bash двойные скобки задают арифметический контекст (в котором знаки долларакстати, по большей части необязательный) для сравнения (также используется в арифметическом расширении for ((i=0; i<=10; i++))
и $(())
) и используется для различения последовательности от набора одиночных скобок, который создает подоболочку.
This,например, выполняет команду true
и, поскольку она всегда верна, она выполняет действие:
if (true); then echo hi; fi
Это то же самое, что и
if true; then echo hi; fi
, за исключением того, что создается подоболочка.Тем не менее, if ((true))
проверяет значение переменной с именем "true".
Если бы вы включили знак доллара, то "$ true" было бы однозначно переменной, но поведение if
с одиночнымкруглые скобки (или без скобок) изменились бы.
if ($true)
или
if $true
выполнит содержимое переменной как команду и выполнит условное действие на основе значения команды выхода (или выдаст сообщение «команда не найдена»)если содержимое не является допустимой командой).
if (($true))
делает то же самое, что и if ((true))
, как описано выше.