¿Cómo asignar la salida de un comando Bash a una variable? [duplicar]

Resuelto Zenet asked hace 14 años • 5 respuestas

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?

Zenet avatar Feb 23 '10 05:02 Zenet
Aceptado

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.

John Weldon avatar Feb 22 '2010 22:02 John Weldon

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.

Johannes Weiss avatar Feb 22 '2010 22:02 Johannes Weiss

En este caso específico, tenga en cuenta que bash tiene una variable llamada PWDque contiene el directorio actual: $PWDes 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.