[ встроенная команда оболочки в bash и zsh:
$ type [
[ is a shell builtin
Из документации команд Shell Builtin :
Встроенные команды содержатся внутри самой оболочки . Когда имя встроенной команды используется в качестве первого слова простой команды (см. Простые команды ), оболочка выполняет команду напрямую, без вызова другой программы. Встроенные команды необходимы для реализации функциональности, которую невозможно или неудобно получить с помощью отдельных утилит.
Официальная документация ( $ help test) позволяет использовать только =:
STRING1 = STRING2
Истинно, если строки равны.
Итак, правильное выражение будет:
$ [ "a" = "a" ] && echo yes
yes
То, что происходит, - то, что bash немного менее строг. Поддержка ==оператора с [ расширением bash, похоже, не рекомендуется использовать:
строка1 == строка2
строка1 = строка2
Истинно, если строки равны. При использовании с командой [[] выполняется сопоставление с образцом, как описано выше (см. Условные конструкции ).
'=' должен использоваться с командой test для соответствия POSIX.
Если вы хотите использовать ==, вы должны использовать [[ключевое слово:
$ [[ "a" == "a" ]] && echo yes
yes
Имейте в виду, что [[он менее переносим (это не POSIX). Но и bash, и zsh поддерживают это.
$PATHпоиска. и==не действуетtestсинтаксис для/usr/bin/[Анвэя. Просто=в порядке.