将包含空格的grep输出存储在数组中

时间:2012-01-11 15:33:35

标签: arrays bash shell grep whitespace

我想将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 个答案:

答案 0 :(得分:13)

数组元素在IFS值上拆分。如果要在换行符上拆分,请调整IFS:

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