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


Answers

Actualización (2018): el camino correcto es

$(sudo run command)

Estás usando el tipo equivocado de apóstrofo. Necesitas ` , no ' . Este personaje se llama "backticks" (o "acento grave").

Me gusta esto:

#!/bin/bash

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

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

echo "$MOREF"
Question

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 comando y le paso los argumentos, no obtengo ningún resultado. Sin embargo, cuando ejecuto los comandos contenidos dentro de la variable $MOREF , puedo obtener resultados.

Me gustaría saber cómo se pueden tomar los resultados de un comando que se debe ejecutar dentro de un script, guardarlo en una variable y luego generar esa variable en la pantalla.




Esta es otra forma, buena para usar con algunos editores de texto que no pueden resaltar correctamente cada código intrincado que cree.

read -r -d '' str < <(cat somefile.txt)
echo "${#str}"
echo "$str"



Cuando establezca una variable, asegúrese de que NO tiene espacios antes y / o después del signo = . Literalmente pasé una hora tratando de resolver esto, probando todo tipo de soluciones. Esto no es guay.

Correcto:

WTFF=`echo "stuff"`
echo "Example: $WTFF"

Fallará con error: (cosas: no encontradas o similares)

WTFF= `echo "stuff"`
echo "Example: $WTFF"



Sé tres maneras de hacer:

1) Las funciones son adecuadas para tales tareas:

func (){
ls -l
}

Invocarlo diciendo func

2) También otra solución adecuada podría ser eval:

var="ls -l"
eval $var

3) El tercero está usando variables directamente:

var=$(ls -l)
OR
var=`ls -l`

puede obtener la salida de la tercera solución de la mejor manera:

echo "$var"

y también de manera desagradable:

echo $var



Solo para ser diferente:

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



Aquí hay dos formas más: tenga en cuenta que el espacio es muy importante en bash, por lo que si desea que su comando se ejecute como está, sin introducir más espacios.

  1. siguiente asigna a Harshil L y luego lo imprime

    L=$"harshil"
    echo "$L"
    
  2. following asigna la salida de un comando tr a L2. tr está siendo operado en otra variable L1.

    L2=$(echo "$L1" | tr [:upper:] [:lower:])