2012-01-11 3 views
6

Я хочу сохранить некоторые строки вывода blkid в массиве. Проблема состоит в том, что эти строки содержат пробелы, а синтаксис массива воспринимает их как разделители для отдельных элементов массива, поэтому я получаю разбитые строки в моем массиве, а не одну строку, имеющую один элемент массива.Хранить вывод grep, содержащий пробелы в массиве

Это код, который я в настоящее время: devices=($(sudo blkid | egrep '^/dev/sd[b-z]'))

echo ${devices[*]} дает мне следующий вывод:

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

Но echo ${#devices[*]} дает мне 7 но InstEd я хочу иметь 2. Я хочу, чтобы /dev/sdb1: LABEL="ARCH_201108" TYPE="udf" был первым элементом в моем массиве устройств, а /dev/sdc1: LABEL="WD" UUID="414ECD7B314A557F" TYPE="ntfs" - вторым. Как я могу это сделать?

ответ

13

Элементы массива разделены на значение IFS. Если вы хотите разделить на новой строки, настроить IFS:

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

Красиво сделано ... +1 –

+0

Спасибо, что exaclty то, что я искал. –

+0

Я рад, что таких людей, как вы, есть: спасибо за ответ :) –