Soy nuevo en esto. Cuando ejecuto el siguiente comando:
grep "type" /root/myFile | cut-d'=' -f2
Obtengo lo siguiente:
102
304
503
442
Quiero almacenar el contenido del primer comando en una variable de modo que el contenido de la variable sea equivalente a declararlo así:
myVariable="102 304 503 442"
No sé cómo hacer con esto. ¿Lo inicializo myVariable
con una cadena vacía y recorro el contenido del comando línea por línea y lo agrego a myVariable con espacios en blanco en el medio o hay una manera más fácil de hacer esto con bash?
Respuesta1
Puede hacerlo consigo bash
mismo, utilizando la sustitución de comandos y luego la expansión de parámetros.
Primero tome la salida del comando en una variable usando la sustitución de comandos $()
y luego use la expansión de parámetros para reemplazar todas las nuevas líneas con espacios ${variable//$'\n'/ }
:
$ myVariable=$(grep "type" /root/myFile | cut-d'=' -f2)
$ myVariable=${myVariable//$'\n'/ }
$ echo $myVariable
102 304 503 442
Pero por motivos de reutilización y limpieza, sería mejor utilizar una matriz:
myArray=( $(grep "type" /root/myFile | cut-d'=' -f2) )
e iterar sobre los elementos de la matriz de la manera habitual.
Respuesta2
myVariable=`grep "type" /root/myFile | cut-d'=' -f2`
Lo que está entre comillas invertidas (`) se ejecuta y la salida se asigna a myVariable
.
Si su salida actual está separada por avances de línea ( \n
), es posible que desee reemplazarlos con espacios como tr
:
myVariable=`grep "type" /root/myFile | cut-d'=' -f2`|tr '\n' ' '`
Nota: Algunas personas prefieren usar la $()
sintaxis en lugar de las comillas invertidas, pero ambas son útiles y cuando tengo la opción, uso las comillas invertidas. La verdadera ventaja de tener ambos es si desea manejar la ejecución en dos niveles, ya que la expresión con comillas invertidas se enviará primero a un subshell y luego $()
se ejecutará la parte.