жестко проходя обучение 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$
[
версия команды требует ]
как обязательный последний параметр (таким образом, этому должно предшествовать пространство). Это - просто формальная, синтаксическая вещь вынудить пользователей закрыть “блок” на кронштейнах, таким образом, команды смотрят этот путь:
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
команда более полезна, когда у Вас есть маскирование псевдонима или функция [
.