Сохранять вывод grep, содержащий пробелы, в массиве - PullRequest
6 голосов
/ 11 января 2012

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

Этокод, который у меня сейчас есть: 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, но я хочу получить 2.Я хочу, чтобы /dev/sdb1: LABEL="ARCH_201108" TYPE="udf" был первым элементом в моем массиве устройств, а /dev/sdc1: LABEL="WD" UUID="414ECD7B314A557F" TYPE="ntfs" - вторым.Как я могу это сделать?

1 Ответ

13 голосов
/ 11 января 2012

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

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