450 votos

Cómo establecer una variable BASH igual a la salida de un comando?

Estoy trabajando en un simple proyecto de secuencias de comandos para el trabajo que implica el uso de BASH. Tengo una bastante simple script que es algo como lo siguiente:

#!/bin/bash

VAR1="$1"
VAR2="$2"

MOREF='sudo run command against $VAR1 | grep name | cut -c7-'

echo $MOREF

Al ejecutar esta secuencia de comandos desde la línea de comandos y pasar los argumentos que yo no soy capaz de conseguir ningún resultado. Sin embargo, cuando ejecuta los comandos contenidos en el MOREF variable, soy capaz de obtener una salida. Me gustaría saber cómo puede uno tomar los resultados de un comando que debe ejecutarse dentro de un script, guardarlo en una variable, y luego la salida de esa variable en la pantalla?

679voto

Andy Lester Puntos 34051

Además de los acentos abiertos, puede utilizar $() , lo que me resulta más fácil de leer, y permite la anidación.

 OUTPUT="$(ls -1)"
echo "${OUTPUT}"
 

Citando ( " ) sí importa para preservar los valores de varias líneas.

99voto

Ilya Kogan Puntos 7357

Usted está utilizando el tipo equivocado de apóstrofe. Necesitas ` , no ' . Este personaje se llama "acentos abiertos" (o "acento grave").

Como este:

 #!/bin/bash

VAR1="$1"
VAR2="$2"

MOREF=`sudo run command against $VAR1 | grep name | cut -c7-`

echo $MOREF
 

39voto

bitwelder Puntos 310

Como ya han indicado para usted, usted debe utilizar acentos abiertos ''.

La alternativa propuesta $(command) funciona tan bien, y es también más fácil de leer, pero tenga en cuenta que sólo es válida con bash o korn (conchas y caparazones derivados de aquellos), así que si las secuencias de comandos tienen que ser realmente portátil en varios sistemas Unix, debe preferir la vieja notación acentos abiertos.

19voto

Blagovest Buyukliev Puntos 22767

Usted debe rodear el comando entre comillas sencillas:

 OUTPUT=`ls -l`
echo $OUTPUT
 

Poner un comando entre comillas sencillas lo ejecuta y devuelve la salida sin imprimirlo en la pantalla.

12voto

DigitalRoss Puntos 80400

Sólo para ser diferente:

 MOREF=$(sudo run command against $VAR1 | grep name | cut -c7-)
 

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X