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 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 bash
lugar de poner directamente, a#!/bin/bash
menos que estés absolutamente seguro de que estásbash
dentro/bin
debido 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
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. EnSTR = "foo"
,STR
no es una asignación variable.fuente
FOO-BAR=qux
no es una asignación variable yaFOO-BAR
que no es un nombre válido.Suelta los espacios alrededor del
=
letrero:fuente
set foo = bar
es 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