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

Ale*_*ier 6 arrays bash shell whitespace grep

我想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"
Run Code Online (Sandbox Code Playgroud)

但是echo ${#devices[*]}给了我7但是我想要拥有2.我希望/dev/sdb1: LABEL="ARCH_201108" TYPE="udf"成为我的设备阵列中的第一个元素,并/dev/sdc1: LABEL="WD" UUID="414ECD7B314A557F" TYPE="ntfs"成为第二个元素.我怎么能做到这一点?

cho*_*oba 13

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

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