Bash:将行转换为数组,同时保留项目中的连续空格

Bash: convert line to array while keeping consecutive spaces in items

Bash 中有很多关于如何将一行转换为数组的帖子。我没有找到可以回答我的问题的答案:当项目可以有连续的空格并且您不希望它们折叠成一个字符时,如何进行转换?

示例输入行:a bcd "ef gh" " ijk "

预期数组项:"a", "bcd", "ef gh", " ijk "

所以最后一个不应该是 " ijk ",这是使用标准 arr=$(line) 解决方案时的结果。

当输入行中参数之间的连续空白字符折叠时,我可以接受。

这个例子真的只是一个例子。输入行将从包含许多要转换的不同行的文件中读取。

有什么想法吗?

与我的评论部分矛盾,如果你修改你的输入文件看起来像

a bcd ef\ gh \ \ \ ijk\ \ \ 

然后

while read -a arr; do
    printf "%s\n" "${arr[@]}"
done < file.txt

将按照您想要的方式保留转义空格。 (如果没有 -rread 只会对未转义的空格进行分词。)与正常的 shell 处理不同,这里的 "ef gh" 不等同于 ef\ gh.


我在评论中提到的解决方案是对输入文件进行更大量的修改:

a
bcd
ef gh
   ijk   
#
l m
n op
#
q r s
  tu v

和类似

的循环
while :; do
    arr=()
    while IFS= read -r element; do
        if [[ element = #* ]]; then
            # do something with arr here
            break
        fi
        arr+=("$element")
    done
done < file.txt