Сравнение ! =
и = ~
похоже на сравнение яблок с апельсинами.
! =
примерно означает «не равно», а = ~
означает «соответствует».
Подробнее об этих операторах можно прочитать в разделе [[выражение]]
в man bash
. Вот выдержка из наиболее важных разделов:
Когда используются операторы == и! =, Строка справа от оператора считается шаблоном и сопоставляется в соответствии с правила, описанные ниже в разделе «Сопоставление с образцом», как если бы была включена опция оболочки extglob . Оператор = эквивалентен оператору ==. Если параметр оболочки nocasematch включен, сопоставление выполняется без учета регистра буквенных символов. Возвращаемое значение равно 0, если строка соответствует (==) или не соответствует (! =) Шаблону , и 1 в противном случае. Любая часть шаблона может быть заключена в кавычки для принудительного сопоставления указанной в кавычках части как строки. Доступен дополнительный бинарный оператор = ~ с тем же { {1}} приоритет как == и! =. Когда он используется, строка справа от оператора считается расширенным регулярным выражением и соответствующим образом сопоставляется (как в regex (3)). Возвращаемое значение - 0, если строка соответствует шаблону, и 1 в противном случае. Если регулярное выражение синтаксически неверно, возвращаемое значение условного выражения равно 2.
Они эквивалентны.
Относительный порядок перенаправлений может иметь значение, но не их положение по отношению к команде.