Linux - Журнал попыток ввода имени пользователя и пароля

[] является встроенной командой оболочки в bash и zsh:

$ type [
[ is a shell builtin

Из документации Встроенные команды оболочки:

Встроенные команды содержатся в самой оболочке. Когда имя встроенной команды используется в качестве первого слова простой команды (см. Простые команды), оболочка выполняет команду напрямую, не вызывая другую программу. Встроенные команды необходимы для реализации функциональности, которую невозможно или неудобно получить с помощью отдельных утилит.

Официальная документация ($ help test) разрешает использовать только =:

STRING1 = STRING2

Истинно, если строки равны.

Таким образом, правильным выражением будет:

$ [ "a" = "a" ] && echo yes
yes

Что происходит, так это то, что bash немного менее строг. Поддержка оператора == с помощью [кажется расширением bash, и использовать его не рекомендуется:

string1 == string2

string1 = string2

Истинно, если строки равны. При использовании с командой [[ выполняет сопоставление с образцом, как описано выше (см. Условные конструкции).

'=' следует использовать с командой test для соответствия POSIX.

Если вы хотите использовать ==, вам следует использовать ключевое слово [[:

$ [[ "a" == "a" ]] && echo yes
yes

Имейте в виду, что [[[ менее переносимо (не является POSIX). Но и bash, и zsh поддерживают его.

4
11.10.2015, 23:50
0 ответов

Теги

Похожие вопросы