Ответ 1
Для цифрового сравнения вы можете:
if ! (( (a == b) && (a == c) ))
Для сравнения строк:
if ! [[ "$a" == "$b" && "$a" == "$c" ]]
В Bash двойные круглые скобки устанавливают арифметический контекст (в котором знаки доллара в основном являются необязательными, для сравнения) (также используется в арифметическом расширении for ((i=0; i<=10; i++))
и $(())
) и используется для отличить последовательность от набора одиночных круглых скобок, которая создает подоболочку.
Это, например, выполняет команду 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))
, как описано выше.