bash - una - shell script linux español
¿Cómo asignar la salida de un comando Bash a una variable? (5)
Esta pregunta ya tiene una respuesta aquí:
Tengo un problema al poner el contenido del comando pwd
en una variable de shell que usaré más adelante.
Aquí está mi código de shell (el ciclo 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?
Aquí está tu script ...
DIR=$(pwd)
echo $DIR
while [ "$DIR" != "/" ]; do
cd ..
DIR=$(pwd)
echo $DIR
done
Tenga en cuenta los espacios, el uso de comillas y $ signos.
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`
. (Lo mismo ocurre con otros shells, esta es una característica estándar .) Para que pueda escribir su 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 ( /[?*
), Ya que el shell divide el resultado de expansiones de variable en palabras y realiza globbing en estas palabras. Siempre duplique las expansiones de variables "$foo"
y las sustituciones de comandos "$(foo)"
(a menos que sepa específicamente que no tiene que hacerlo).
En el caso general, como ya se han mencionado otras respuestas:
- No puede usar espacios en blanco alrededor del signo igual en una asignación:
var=value
, notvar = value
- El
$
significa "tomar el valor de esta variable", por lo que no lo usa al asignar:var=value
, not.$var=value
En shell, asigna 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.
También puede hacer comandos más complejos, solo para completar los ejemplos anteriores. Por lo tanto, supongamos que quiero obtener la cantidad de procesos que se ejecutan en el sistema y almacenarlos en la variable $ {NUM_PROCS} .
Todo lo que tiene que hacer es generar el conducto de comandos y su salida (el recuento de procesos) en la variable.
Se ve algo como esto:
NUM_PROCS=$(ps -e | sed 1d | wc -l)
Espero que eso ayude a agregar alguna información práctica a esta discusión.
Tratar:
pwd=`pwd`
o
pwd=$(pwd)
Observe que no hay espacios después del signo igual.
También como señala el Sr. Weiss; no asigna a $pwd
, asigna a pwd
.