¿Por qué debería haber un espacio después de ” en Bash?

Estaba tratando de escribir un script Bash que usa una statement if .

 if [$CHOICE -eq 1]; 

El script me estaba dando errores hasta que di un espacio después de [ y antes ] como se muestra a continuación:

 if [ $CHOICE -eq 1 ]; 

Mi pregunta aquí es: ¿por qué el espacio alrededor de los corchetes es tan importante en Bash?

¡Una vez que comprendes que [ es una orden , mucho se vuelve más claro!

[ es otra forma de deletrear ” test “.

 help [ 

Sin embargo, mientras hacen exactamente lo mismo, resulta que la test tiene una página de ayuda más detallada. Comprobar

 help test 

…para más información.


Además, tenga en cuenta que estoy usando, por intención, la help test y no la man test . Eso es porque test y [ son comandos integrados de shell hoy en día. Su conjunto de características puede diferir de /bin/test y /bin/[ de coreutils, que son los comandos que se describen en las páginas man .

De otra pregunta :

Un poco de historia: esto se debe a que ‘[‘ históricamente no fue un shell-built-in sino un ejecutable separado que recibió el expresson como argumentos y arrojó un resultado. Si no rodeó el ‘[‘ con espacio, el shell estaría buscando $ PATH para un nombre de archivo diferente (y no lo encontrará). – Andrew Medico 24 de junio de 2009 a las 1:13

[ es un comando y $CHOICE debe ser un argumento, pero al hacer [$CHOICE (sin ningún espacio entre [ y $CHOICE ] está intentando ejecutar un comando llamado [$CHOICE . La syntax para el comando es:

 command arguments separated with space 

[ es un comando de test . Entonces requiere espacio