Bash не обрабатывает символы [или ](сами по себе), которые отличаются от букв алфавита.
В этом случае bash видит «слово» [и ищет команду с таким именем. Если вы заглянете в свою файловую систему, вы, вероятно, обнаружите, что /bin/[(или /usr/bin/[) существует как исполняемый файл. Как это бывает, bash также предоставляет встроенную версию (для эффективности), но это только деталь реализации.
Команда [(например, исполняемый файл с таким именем) имеет правило, согласно которому последний передаваемый ей параметр должен быть, ]иначе она выдаст ошибку. Это может быть отчасти потому, что это эстетично, но также защищает вас от случайно усеченных команд, что приятно.
Тот факт, что они не являются особыми, объясняет, почему вы не можете опустить пробел до и после [или ].
Исключения :
- Когда
[и ]происходят в правильном формате в пределах того же слова, например [a-z], то , что является особенным и Подстановка правила BASh применимо.
[[Команда является особенной и может сделать много вещей , [не может (и параметры внутри [[ .. ]]обрабатываются по- разному, как и некоторые разрывы строк). Соответствующее ]]также является специальным, поскольку это зарезервированное для оболочки слово, которое не может быть именем команды, и завершает специальную обработку, которая следует за [[ключевым словом.
[это (также) самодостаточная команда: -rwxr-xr-x 1 root root 39552 3 декабря 18:14 / usr / bin / [Хотя возможно, что есть и встроенная «параллель», как для напримерkill. В некоторых системахtestкоманда является символической ссылкой на[или наоборот. AFAIK,]сам по себе ничего не значит, но принято «закрывать»[- но это больше по «эстетической» причине.