¿Cómo asignar la salida de un comando Bash a una variable? [duplicar]
tengo un problema para poner el contenido depwd
comando en una variable de shell que usaré más adelante.
Aquí está mi código de shell (el bucle no se detiene):
#!/bin/bash
pwd= `pwd`
until [ $pwd = "/" ]
do
echo $pwd
ls && cd .. && ls
$pwd= `pwd`
done
¿Podrías detectar mi error, por favor?
Intentar:
pwd=`pwd`
o
pwd=$(pwd)
Observe que no hay espacios después del signo igual.
También como señala el Sr. Weiss; no asignas a $pwd
, asignas a pwd
.
En Shell asignas a una variable sin el signo de dólar:
TEST=`pwd`
echo $TEST
eso es mejor (y se puede anidar) pero no es tan portátil como los backtics:
TEST=$(pwd)
echo $TEST
Recuerde siempre: el signo de dólar solo se usa al leer una variable.
En este caso específico, tenga en cuenta que bash tiene una variable llamada PWD
que contiene el directorio actual: $PWD
es equivalente a `pwd`
. (También lo hacen otros shells, esta es una característica estándar ). Entonces puedes escribir tu script de esta manera:
#!/bin/bash
until [ "$PWD" = "/" ]; do
echo "$PWD"
ls && cd .. && ls
done
Tenga en cuenta el uso de comillas dobles alrededor de las referencias de variables. Son necesarios si la variable (aquí, el directorio actual) contiene espacios en blanco o comodines ( \[?*
), porque el shell divide el resultado de las expansiones de la variable en palabras y realiza globbing sobre estas palabras. Siempre coloque comillas dobles en las expansiones de variables "$foo"
y sustituciones de comandos"$(foo)"
(a menos que sepa específicamente que no es necesario hacerlo).
En el caso general, como ya se han mencionado otras respuestas:
- No puedes usar espacios en blanco alrededor del signo igual en una tarea:
var=value
, novar = value
- Significa
$
"tomar el valor de esta variable", por lo que no lo usa al asignar:var=value
, no.$var=value