Bash не позначає [або ]символи (самостійно) нічим не відрізняються від букви алфавіту.
У цьому випадку bash бачить "слово" [, і йде шукати команду з цим ім'ям. Якщо ви заглянете у свою файлову систему, ви, ймовірно, виявите, що /bin/[(або /usr/bin/[) існує як виконуваний файл. Як це буває, bash також пропонує вбудовану версію (задля ефективності), але це лише детальна інформація про реалізацію.
У [команді (як у виконуваному файлі з цим ім'ям) є правило, згідно з яким останній параметр, який ви йому передаєте, повинен бути, ]інакше він видає помилку. Це може бути частково тому, що це естетично, але воно також захищає вас від випадково врізаних команд, що приємно.
Справа в тому, що вони не є особливими , тому ви не можете опустити пробіл до і після [або після ].
Винятки :
- Коли
[і ]виникають у правильному форматі в одному слові, наприклад [a-z], тоді це особливі правила, і застосовуються правила глобального керування баша.
[[Команда є особливою і може зробити багато речей , [не може (і параметри всередині [[ .. ]]обробляються по- різному, як і деякі розриви рядків). Відповідне ]]також є спеціальним, оскільки це застережене для оболонки слово, яке не може бути ім'ям команди, і закінчує спеціальну обробку, яка слідує за [[ключовим словом.
[це (також) самодостатня команда: -rwxr-xr-x 1 root root 39552 3 грудня 18:14 / usr / bin / [Хоча можливо, є також "паралельний" вбудований, як це є для наприкладkill. У якійсь системіtestкоманда є символічним посиланням на[або навпаки. AFAIK,]сам по собі нічого не означає, але його прийнято "закривати"[- але це більше з "естетичної" причини.