Почему в 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
Стоит отметить, что [ также используется при сопоставлении глобусов, что может привести к проблемам.
$ echo [12345]
[12345]
$ echo oops >3
$ echo [12345]
3