script not found entorno bash shell syntax sh variable-assignment

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:

  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 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