Este es el comando: pdc status -a 2>&1 | grep 'okay'
da el siguiente resultado
[okay ]: you are currently listening: 33
[okay ]: you are currently listening: 22
[okay ]: you are currently listening: 11
He escrito este comando en el archivo scrip de shell. Pero quiero almacenar la salida de este comando en la matriz para un procesamiento en cada uno de los valores de índice en la matriz.
¿Cómo puedo almacenar la salida de este comando en la matriz?
mapfile -t array < <(grep.....)
En primer lugar, no necesariamente necesita la matriz, para procesar la salida línea por línea puede hacer:
Si necesita la matriz, Glenn Jackman ya le dio la mejor manera de hacerlo, pero aquí hay otro enfoque:
Explicación:
$IFS=$'\n'
:$IFS
es el separador de campo de entrada de bash , configurándolo solo con el carácter de nueva línea (\n
) asegura que sus líneas de salida no se dividirán en espacios en blanco para que pueda guardar cada línea como un elemento de matriz separado. Sin esto, cada palabra de la salida de su comando sería un elemento diferente.Dependiendo de lo que desee hacer, puede ser una buena idea guardar el valor anterior
$IFS
y restaurarlo después de leer la matriz:$(command)
: Esto se llama sustitución de comando y le permite guardar la salida de un comando en una variable. Hay dos formas de hacer esto:y
De los dos, el
$()
es mejor porque:Puede tratar con comandos anidados:
Por ejemplo
var=$(cat $(find ~/))
Tiene muchos menos problemas con las citas y da como resultado una sintaxis más limpia. Mira aquí para más.
fuente
Otra forma más intuitiva de usar
readarray
builtin (verhelp -m readarray
):Luego, para imprimir un elemento de matriz, digamos segundo elemento, puede usar:
Para imprimir todos los elementos de la matriz en líneas separadas, puede usar:
fuente