No se encuentra el error de comandos en Bash asignación de variables
-
20-09-2019 - |
Pregunta
Tengo este script llamado test.sh:
#!/bin/bash
STR = "Hello World"
echo $STR
cuando corro sh test.sh
me sale esto:
test.sh: line 2: STR: command not found
¿Qué estoy haciendo mal? Miro muy básicas / principiantes de bash scripting tutoriales en línea y así es como se suele decir 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
.
Solución
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 se escribe:
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 correspondiente de la especificación de lenguaje rel="noreferrer"> sh establece lo siguiente:
A "comando simple" es una secuencia de asignaciones de variables opcionales y redirecciones, en cualquier secuencia, seguido opcionalmente por palabras y redirecciones, terminada por un operador de control.
En ese contexto, un word
es el comando que bash se va a ejecutar. Cualquier cadena que contiene =
(en cualquier posición que no sea en el principio de la cadena) que no es una redirección es una asignación de variable, mientras que cualquier cadena que no es una redirección y no contiene =
es un comando. En STR = "foo"
, STR
no es una asignación variable.
Otros consejos
Caída de los espacios alrededor del signo =
:
#!/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 de '='. En caso de que haya ningún espacio alrededor '=', entonces en el modo interactivo que da errores como `
Sin comando 'str' encontrados
Sé que esto ha sido contestada con una respuesta muy alta calidad. Pero, en definitiva, no se puede tener espacios.
#!/bin/bash
STR = "Hello World"
echo $STR
No funcionó debido a los espacios alrededor del signo igual. Si se va a ejecutar ...
#!/bin/bash
STR="Hello World"
echo $STR
Sería trabajar
Cuando se define una variable, entonces no tiene que poner en espacios adicionales.
por ejemplo.
name = "Stack Overflow"
// it is not valid, you will get an error saying- "Command not found"
Así que quitar espacios:
name="Stack Overflow"
y no tendrán ningún problema.