2012-01-11 11 views
6

Quiero almacenar algunas líneas de la salida de blkid en una matriz. El problema es que esas líneas contienen espacios en blanco y la sintaxis del arreglo los toma como delimitadores para elementos de matriz individuales, de modo que termine con líneas divididas en mi matriz en lugar de una línea que contiene un elemento de matriz.Almacenar salida de grep que contiene espacios en blanco en una matriz

Este es el código que tengo actualmente: devices=($(sudo blkid | egrep '^/dev/sd[b-z]'))

echo ${devices[*]} me da el siguiente resultado:

/dev/sdb1: LABEL="ARCH_201108" TYPE="udf" 
/dev/sdc1: LABEL="WD" UUID="414ECD7B314A557F" TYPE="ntfs" 

Pero echo ${#devices[*]} me da 7 pero insted quiero tener 2. Quiero que /dev/sdb1: LABEL="ARCH_201108" TYPE="udf" sea el primer elemento en mi matriz de dispositivos y /dev/sdc1: LABEL="WD" UUID="414ECD7B314A557F" TYPE="ntfs" en ser el segundo. ¿Cómo puedo lograr eso?

Respuesta

13

Los elementos de matriz se dividen en el valor IFS. Si desea dividir el salto de línea, ajuste IFS:

IFS_backup=$IFS 
IFS=$'\n' 
devices=($(sudo blkid | egrep '^/dev/sd[b-z]')) 
IFS=$IFS_backup 
echo ${#devices[@]} 
+0

Bien hecho ... 1 –

+0

Gracias, que es exaclty lo que estaba buscando. –

+0

Me alegra que existan personas como usted: gracias por la respuesta :) –

Cuestiones relacionadas