Error de comando no encontrado en la asignación de variables de Bash
Tengo este script llamado test.sh:
#!/bin/bash
STR = "Hello World"
echo $STR
cuando ejecuto sh test.sh
me sale esto:
test.sh: line 2: STR: command not found
¿Qué estoy haciendo mal? Miro tutoriales de scripting bash extremadamente básicos/principiantes en línea y así es como dicen que se deben declarar variables... Así que no estoy seguro de qué estoy haciendo mal.
Estoy en Ubuntu Server 9.10. Y sí, bash se encuentra en /bin/bash
.
No puede haber espacios alrededor del =
letrero.
Cuando escribes:
STR = "foo"
bash intenta ejecutar un comando nombrado STR
con 2 argumentos (las cadenas =
y foo
)
Cuando escribes:
STR =foo
bash intenta ejecutar un comando nombrado STR
con 1 argumento (la cadena =foo
)
Cuando escribes:
STR= foo
bash intenta ejecutar el comando foo
con STR configurado en 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 equivale a
STR="" foo
.
La sección relevante de la especificación del lenguaje sh, sección 2.9.1, establece:
Un "comando simple" es una secuencia de asignaciones de variables y redirecciones opcionales, en cualquier secuencia, seguidas opcionalmente de palabras y redirecciones, terminadas por un operador de control.
En ese contexto, a word
es el comando que ejecutará bash. Cualquier cadena que contenga =
(en cualquier posición que no sea al principio de la cadena) que no sea una redirección y en la que la parte de la cadena antes de sea =
un nombre de variable válido es una asignación de variable, mientras que cualquier cadena que no sea una redirección o una asignación de variable es un comando. En STR = "foo"
, STR
no es una asignación de variable.
Suelta los espacios alrededor del =
letrero:
#!/bin/bash
STR="Hello World"
echo $STR
En el modo interactivo todo se ve bien:
$ str="Hello World"
$ echo $str
Hello World
Obviamente (!), como dijo Johannes, no hay espacio alrededor =
. En caso de que haya algún espacio alrededor =
, en el modo interactivo se muestran errores como
No se encontró ningún comando 'str'
Sé que esto ha sido respondido con una respuesta de muy alta calidad. Pero, en definitiva, no se pueden tener espacios.
#!/bin/bash
STR = "Hello World"
echo $STR
No funcionó debido a los espacios alrededor del signo igual. Si tuvieras que correr...
#!/bin/bash
STR="Hello World"
echo $STR
funcionaria