Почему должно быть место после '[' и до ']' в Bash?
Я пытался написать Bash script, который использует оператор if
.
if [$CHOICE -eq 1];
script давал мне ошибки, пока я не дал пробел после [
и до ]
, как показано ниже:
if [ $CHOICE -eq 1 ];
Мой вопрос: почему пространство вокруг квадратных скобок так важно в Bash?
Ответы
Ответ 1
Как только вы поймете, что [
- команда , становится понятнее!
[
- это еще один способ записать "test
".
help [
Однако, пока они делают то же самое, test
оказывается более подробной справочной страницей. Проверьте
help test
... для получения дополнительной информации.
Кроме того, обратите внимание, что я использую, по желанию, help test
, а не man test
. Это потому, что test
и [
теперь являются командами оболочки. Их набор функций может отличаться от /bin/test
и /bin/[
от coreutils, которые являются командами, описанными на страницах man
.
Ответ 2
Из другого вопроса:
Немного истории: это потому, что '[' был исторически не встроенным в оболочку, а отдельным исполняемым файлом, который получил выражение в качестве аргументов и возвратил результат. Если вы не окружаете "[" пробелом, оболочка будет искать $PATH для другого имени файла (и не найдет его). - Эндрю Медико
Ответ 3
[
- это команда, а $CHOICE
должен быть аргументом, но, выполняя [$CHOICE
(без пробела между [
и $CHOICE
), вы пытаетесь запустить команду с именем [$CHOICE
. Синтаксис команды:
command arguments separated with space
Ответ 4
[
- это команда test
. Поэтому для этого требуется пространство.