Básicamente estoy tratando de asignar ciertas partes de la salida de un comando de shell a varias variables, pero no sé cómo hacerlo.
Por simplicidad, suponga que el comando en el shell, cuando se ejecuta, imprime
one two three four
que se puede simular con un
echo "one two three four"
(aunque el comando real es diferente)
Ahora, me gustaría asignar la segunda y cuarta palabra de la salida (en este caso dos y cuatro ) a las variables w1 y w2 .
Pensé que podría usar el comando de lectura así:
echo "one two three four" | awk '{print $2 " " $4}' | read w1 w2
pero esto no funciona, probablemente porque el comando de lectura se ejecuta en un subproceso.
Entonces, ¿cómo voy a lograr lo que busco?
Respuestas:
Esto no funciona porque se
read
ejecuta en un proceso secundario que no puede afectar el entorno de los padres.Tienes pocas opciones:
Puede convertir su comando a:
Alternativamente, cambie IFS y use
set
:o una cadena aquí:
fuente
<<< Here String
read -r
:do not allow backslashes to escape any characters