bash“read -a”在null分隔的字符串变量上循环

时间:2016-01-01 10:17:03

标签: arrays bash delimiter null-character

我一直在阅读这篇文章:bash "for in" looping on null delimited string variable 看看我是否能够处理包含数组内部空格的任意文本。

基于上面的帖子,这很好用:

while IFS= read -r -d '' myvar; do echo $myvar; done < <(printf "%s\0" 'a b' 'c d')

为了检查我的理解,我也这样做了(它仍然可以正常工作):

IFS= read -r -d '' -a myvar < <(printf "%s\0" 'a b' 'c d')

但是,然后我尝试将输出存储在一个错误的数组中:

a b

该数组仅包含c d而非echo ${myvar[@]} a b

GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin14)
Copyright (C) 2007 Free Software Foundation, Inc.

显然,我在这里缺少一个更精细的细节。谢谢你的帮助。

PS。我正在跑步:

{{1}}

1 个答案:

答案 0 :(得分:6)

bash 4.4中,readarray命令获得-d选项,类似于read的相同选项。

$ IFS= readarray -d '' myvar < <(printf "%s\0" 'a b' 'c d')
$ printf "%s\n" "${myvar[@]}"
a b
c d

如果必须支持早期版本,则需要显式循环输出。

while IFS= read -d '' line; do
    myvar+=( "$line" )
done < <(printf "%s\0" 'a b' 'c d')