встроенный [, -bash: [: missing `] '

жестко проходя обучение bash, я обнаружил, что [ и test являются командами и синонимы, и оба являются встроенными.
Поскольку это встроенная функция, она не должна выдавать ошибок для встроенной [], но я получаю -bash: [: missing `] ', { {1}} Может кто-нибудь объяснить мне поведение встроенного здесь. Заранее благодарим.

anupam:Markdown$ which [
/usr/bin/[
anupam:Markdown$ echo $?
0
anupam:Markdown$ which test
/usr/bin/test
anupam:Markdown$ echo $?
0
anupam:Markdown$ builtin test
anupam:Markdown$ echo $?
1
anupam:Markdown$ builtin [
-bash: [: missing `]'
anupam:Markdown$ echo $?
2
anupam:Markdown$ 
7
задан 15 October 2018 в 00:41

1 ответ

[ версия команды требует ] как обязательный последний параметр (таким образом, этому должно предшествовать пространство). Это - просто формальная, синтаксическая вещь вынудить пользователей закрыть “блок” на кронштейнах, таким образом, команды смотрят этот путь:

if [ $1 -eq 2 ]; then

вместо

if [ $1 -eq 2; then

Посмотрите help [:

$ help [
[: [ arg... ]
    Evaluate conditional expression.

    This is a synonym for the "test" builtin, but the last argument must
    be a literal `]', to match the opening `['.

Примечания

  • test версия не требует, ни принимает финал ].

  • Вам не нужно builtin там. Builtins берут приоритет над внешними командами, так просто [ выполнил бы встроенное. builtin команда более полезна, когда у Вас есть маскирование псевдонима или функция [.

10
ответ дан 23 November 2019 в 06:25

Другие вопросы по тегам:

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