not - variables de entorno linux bash
Error de comando no encontrado en la asignaciĆ³n de variable Bash (4)
Cuando define una variable, entonces no tiene que poner espacios adicionales.
P.ej
name = "Stack Overflow"
// it is not valid, you will get an error saying- "Command not found"
Así que quita los espacios:
name="Stack Overflow"
y funcionará bien.
Tengo este script llamado test.sh:
#!/bin/bash
STR = "Hello World"
echo $STR
cuando corro sh test.sh
obtengo esto:
test.sh: line 2: STR: command not found
¿Qué estoy haciendo mal? Miro los tutoriales de scripts de bash extremadamente básicos / para principiantes en línea y así es como dicen para declarar variables ... Así que no estoy seguro de lo que estoy haciendo mal.
Estoy en Ubuntu Server 9.10. Y sí, bash se encuentra en /bin/bash
.
En el modo interactivo todo se ve bien.
$ str="Hello World"
$ echo $str
Hello World
¡Obviamente! como dijo Johannes, no hay espacio alrededor de ''=''. En caso de que haya algún espacio alrededor de ''='', en el modo interactivo da errores como `
No se encontró el comando ''str''
No puede haber espacios alrededor de su signo ''=''.
Cuando escribes:
STR = "foo"
bash intenta ejecutar un comando llamado STR con 2 argumentos (las cadenas ''='' y ''foo'')
Cuando escribes:
STR =foo
bash intenta ejecutar un comando llamado STR con 1 argumento (la cadena ''= foo'')
Cuando escribes:
STR= foo
bash intenta ejecutar el comando foo con STR establecido en la cadena vacía en su entorno.
No estoy seguro de si esto ayuda a aclarar o si es una simple 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 relevante de la especificación de lenguaje sh, sección 2.9.1 establece:
Un "comando simple" es una secuencia de asignaciones y redirecciones de variables opcionales, en cualquier secuencia, opcionalmente seguida de palabras y redirecciones, terminadas por un operador de control.
En ese contexto, una word
es el comando que bash va a ejecutar. Cualquier cadena que contenga =
(en cualquier posición que no sea al principio 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.
Suelte los espacios alrededor del signo =
#!/bin/bash
STR="Hello World"
echo $STR