¿Cómo puedo establecer una variable a la salida de un comando en Bash?

Tengo un script bastante simple que es algo como lo siguiente:

#!/bin/bash

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

echo $MOREF

Cuando ejecuto este script desde la línea de comandos y le paso los argumentos, no obtengo ninguna salida. Sin embargo, cuando ejecuto los comandos contenidos en la variable $MOREF, soy capaz de obtener la salida.

¿Cómo se pueden tomar los resultados de un comando que debe ser ejecutado dentro de un script, guardarlo en una variable, y luego mostrar esa variable en la pantalla?

Solución

Además de los backticks comando puedes usar $(comando) o "$(comando)" que me parece más fácil de leer, y permite el anidamiento.

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

MULTILINE=$(ls \
   -1)
echo "${MULTILINE}"

El entrecomillado (") es importante para preservar los valores de varias líneas.

Comentarios (14)

El camino correcto es

$(sudo run command)

Si va a utilizar un apóstrofe, necesita ``, no. Este carácter se denomina "acento de espalda" (o "acento grave").

Así:

#!/bin/bash

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

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

echo "$MOREF"
Comentarios (4)

Sólo para ser diferente:

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