2012-01-11 11 views
6

Desidero memorizzare alcune righe dell'output di blkid in una matrice. Il problema è che quelle linee contengono spazi bianchi e la sintassi dell'array prende quelle come delimitatori per gli elementi di un singolo array, così che finisco con le linee divise nel mio array invece di una linea che rappresenta un elemento di un array.Memorizza output grep che contiene spazi bianchi in una matrice

Questo è il codice che attualmente ho: devices=($(sudo blkid | egrep '^/dev/sd[b-z]'))

echo ${devices[*]} mi dà il seguente risultato:

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

Ma echo ${#devices[*]} mi dà 7 ma invece voglio avere 2. Voglio che il /dev/sdb1: LABEL="ARCH_201108" TYPE="udf" sia il primo elemento nel mio array di dispositivi e che /dev/sdc1: LABEL="WD" UUID="414ECD7B314A557F" TYPE="ntfs" sia il secondo. Come posso farlo?

risposta

13

Gli elementi di matrice sono divisi sul valore IFS. Se si desidera dividere il ritorno a capo, regolare IFS:

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

Ben fatto ... +1 –

+0

Grazie, che è farmi ridare quello che stavo cercando. –

+0

Sono felice che esistano persone come te: grazie per la risposta :) –

Problemi correlati