Tengo este script llamado test.sh:
#!/bin/bash
STR = "Hello World"
echo $STR
cuando corro sh test.shme sale esto:
test.sh: line 2: STR: command not found
¿Qué estoy haciendo mal? Miro los tutoriales de scripts de bash extremadamente básicos / principiantes en línea y así es como dicen 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.

#!/usr/bin/env bashlugar de poner directamente, a#!/bin/bashmenos que estés absolutamente seguro de que estásbashdentro/bindebido a esta respuesta: stackoverflow.com/a/21613044/3589567Respuestas:
No puede tener espacios alrededor de su signo '='.
Cuando escribes:
bash intenta ejecutar un comando llamado STR con 2 argumentos (las cadenas '=' y 'foo')
Cuando escribes:
bash intenta ejecutar un comando llamado STR con 1 argumento (la cadena '= foo')
Cuando escribes:
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:
STR "=" "foo",STR "=foo",STR="" foo.La sección relevante de la especificación del lenguaje sh, sección 2.9.1 establece:
En ese contexto, a
wordes 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. EnSTR = "foo",STRno es una asignación variable.fuente
FOO-BAR=quxno es una asignación variable yaFOO-BARque no es un nombre válido.Suelta los espacios alrededor del
=letrero:fuente
set foo = bares un error común en los archivos por lotes de Windows, y allí se ridiculiza el idioma del lote ;-)En el modo interactivo, todo se ve bien:
Obviamente (!) Como dijo Johannes, no hay espacio alrededor
=. En caso de que haya espacio alrededor,=entonces en el modo interactivo da errores comofuente
STR = "Hello World", por lo que esta respuesta no se aplica aquí.$marcaSé que esto ha sido respondido con una respuesta de muy alta calidad. Pero, en resumen, no puedes tener espacios.
No funcionó debido a los espacios alrededor del signo igual. Si tuvieras que correr ...
Funcionaria
fuente
Cuando define cualquier variable, entonces no tiene que poner espacios adicionales.
P.ej
Entonces elimine espacios:
y funcionará bien
fuente