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.

¿Fue útil?

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:

  1. el primer comando es exactamente equivalente a: STR "=" "foo",
  2. el segundo es el mismo que STR "=foo",
  3. 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.

scroll top