Bash no trata los caracteres [o ](por sí solos) de manera diferente a una letra del alfabeto.
En este caso, bash ve una "palabra" [, y busca un comando con ese nombre. Si observa su sistema de archivos, probablemente encontrará que /bin/[(o /usr/bin/[) existe como un archivo ejecutable. De hecho, bash también proporciona una versión integrada (en aras de la eficiencia), pero eso es solo un detalle de implementación.
El [comando (como en, el ejecutable con ese nombre), tiene una regla de que el último parámetro que debe pasar es ]o de lo contrario arroja un error. Esto puede deberse en parte a que es estéticamente agradable, pero también sirve para protegerlo de comandos truncados accidentalmente, lo cual es bueno.
El hecho de que estos no sean especiales es la razón por la que no puede omitir el espacio en blanco antes y después de [o ].
Excepciones :
- Cuando
[y ]ocurra en el formato correcto dentro de la misma palabra, por ejemplo [a-z], eso es especial y se aplican las reglas globales de bash.
- El
[[comando es especial y puede hacer muchas cosas [que no puede (y los parámetros en el interior [[ .. ]]se procesan de manera diferente, al igual que algunos saltos de línea). El correspondiente ]]también es especial, ya que es una palabra reservada de shell que no puede ser un nombre de comando y finaliza el procesamiento especial que sigue a la [[palabra clave.
[es (también) un comando autosuficiente: -rwxr-xr-x 1 root root 39552 3 de diciembre 18:14 / usr / bin / [Aunque es posible que también haya una función "paralela" incorporada, como la hay para por ejemplokill. En algunos sistemas, eltestcomando es un enlace simbólico[o viceversa. AFAIK,]no significa nada en sí mismo, pero se acepta "cerrar" a[, pero es más por razones "estéticas".