用于将空分割线读入数组的单线程?

时间:2015-08-06 15:49:49

标签: bash

以下是将tab - 拆分行拆分为数组的方法:

IFS=$'\t' read -a array < <(echo -e "a\tb\tc")

以下是如何将null - 终止的行读入数组:

while IFS= read -r -d '' item
do array+=("$item")
done < <(echo -e "a\0b\0c\0")

现在,是否有可能将两者结合起来,并且有一个单线适合读取null - 分割线到数组?

首先,将-r -d ''-a array放在一起,并将IFS设置为空,不起作用:

IFS= read -r -d '' -a array < <(echo -e "a\0b\0c")

因为array将有1个项目:a

其次,这样的while构造将null - 分割线读成数组是有点不尽如人意的。如果最后一项不是null,则放弃最后一项。解决方法是将最后一项附加到循环后的数组中,如下面的chepner所示。

while IFS= read -r -d '' item
do array+=("$item")
done < <(echo -e "a\0b\0c")
array+=("$item")

1 个答案:

答案 0 :(得分:3)

没有,如果你不考虑单个while循环a&#34; one&#34; -liner。

while IFS= read -r -d '' item; do array+=("$item"); done < <(echo -e "a\0b\0c\0")

read一次只读取一行输入,并且您使用-d ''来定义一行。也就是说,你不是在对待一个\ 0b \ 0c&#34;作为单行输入,但由于多个行由空字节分隔。 readarray 4中引入的bash命令并未提供指定要作为行分隔符考虑的内容的方法。