Почему в Bash должен быть пробел после '[' и до ']'? - PullRequest
54 голосов
/ 06 марта 2012

Я пытался написать сценарий Bash, который использует оператор if.

if  [$CHOICE -eq 1];

Этот сценарий выдавал мне ошибки, пока я не дал пробел после [ и до ], как показанониже:

if  [ $CHOICE -eq 1 ];

Мой вопрос здесь, почему пространство в квадратных скобках так важно в Bash?

Ответы [ 4 ]

66 голосов
/ 06 марта 2012

Как только вы поймете, что [ является командой , весь лот становится понятнее!

[ - это еще один способ заклинания "test".

help [

Однако, хотя они точно так же , у test оказывается более подробная страница справки.Проверьте

help test

... для получения дополнительной информации.


Кроме того, обратите внимание, что я намеренно использую help test, а не man test.Это потому, что test и [ в настоящее время являются встроенными командами оболочки.Их набор функций может отличаться от /bin/test и /bin/[ от coreutils, которые являются командами, описанными на страницах man.

14 голосов
/ 06 марта 2012

Из другой вопрос :

Немного истории: это потому, что '[' исторически был не встроенной оболочкой, а отдельным исполняемым файлом, который получил выражениев качестве аргументов и вернул результат.Если вы не окружите '[' пробелом, оболочка будет искать в $ PATH другое имя файла (а не находить его).- Эндрю Медико 24 июня 2009 года в 1:13

7 голосов
/ 18 июня 2015

[ - это команда, а $CHOICE - это аргумент, но, делая [$CHOICE (без пробела между [ и $CHOICE), вы пытаетесь запустить команду с именем [$CHOICE. Синтаксис команды:

command arguments separated with space
2 голосов
/ 06 марта 2012

[ - это команда test.Так что это требует места.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...