No se puede tener espacios alrededor de su signo '='.
Cuando se escribe:
STR = "foo"
bash intenta ejecutar un comando llamado STR con 2 argumentos (las cadenas '=' y 'foo')
Cuando se escribe:
STR =foo
bash intenta ejecutar un comando llamado STR con 1 argumento (la cadena '= foo')
Cuando escribe ite:
STR= foo
bash intenta ejecutar el comando foo con juego de RTS a la cadena vacía en su entorno.
no estoy seguro de si esto ayuda a aclarar o si es mera ofuscación, pero tenga en cuenta que:
- el primer comando es exactamente equivalente a:
STR "=" "foo"
,
- el segundo es el mismo que
STR "=foo"
,
- y el último es equivalente a
STR="" foo
.
La sección pertinente de los sh language spec, section 2.9.1 estados:
A "comando simple" es una secuencia de asignaciones de variables opcionales y redirecciones, en cualquier secuencia, seguido opcionalmente de palabras y redirecciones, terminada por un control operador.
En ese contexto, un word
es el comando que bash se va a ejecutar. Cualquier cadena que contenga =
(en cualquier posición que no sea al comienzo de la cadena) que no sea una redirección es una asignación variable, mientras que cualquier cadena que no sea una redirección y no contenga =
es un comando. En STR = "foo"
, STR
no es una asignación de variable.
Me alegro de que hayas hecho la pregunta, ¡no eres el único novato que hay! –
Gracias por hacer esa pregunta. Esta no es una pregunta para avergonzarse. Estoy trabajando hasta tarde en la oficina y no hay un experto en Bash a mi alrededor para responder a esto. –
En estos días (¡casi siete años después!) Hay un linter/analizador de FOSS llamado [shellcheck] (http://www.shellcheck.net) que detectará automáticamente este y otros problemas de sintaxis comunes. Puede usarse en línea o instalarse sin conexión e integrarse en su editor. –