我一直在阅读这篇文章: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}}
答案 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')