variable una script salida programas programacion guardar español ejemplos comandos comando capturar batch bash shell

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 , not var = 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 .