Почему в Bash должен быть пробел после '[' и до ']'?

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

if  [$CHOICE -eq 1];

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

if  [ $CHOICE -eq 1 ];

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

5 ответов

Решение

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

[ это еще один способ по буквам " test ".

help [

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

help test

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


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

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

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

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

command arguments separated with space

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

Стоит отметить, что [ также используется при сопоставлении глобусов, что может привести к проблемам.

      $ echo [12345]
[12345]
$ echo oops >3
$ echo [12345]
3
Другие вопросы по тегам