我想将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"
成为第二个元素。我怎么能做到这一点?
答案 0 :(得分:13)
数组元素在IFS值上拆分。如果要在换行符上拆分,请调整IFS:
IFS_backup=$IFS
IFS=$'\n'
devices=($(sudo blkid | egrep '^/dev/sd[b-z]'))
IFS=$IFS_backup
echo ${#devices[@]}