从文件中读取带空格的引用数组元素?

从文件中读取带空格的引用数组元素?

我使用如下方式将数据传递STDIN到数组中:read

prompt$ cat myfile
a "bc" "d e" f
prompt$ read -a arr < myfile

read似乎没有注意引用的字符串,并为我提供了一个包含 5 个元素的数组:

prompt$ echo ${#arr[@]}
5
prompt$ echo ${arr[@]:0}
a "bc" "d e" f
prompt$ echo ${arr[2]}
"d
prompt$ echo ${arr[3]}
e"

我使用默认IFS设置:\t\nin bash.有多种方法可以使用不同的工具来完成任务,但令我惊讶的是 read 不支持带引号的字符串。

对于将带引号的分隔列表放入数组中还有其他建议吗?

答案1

我想不出一个很好的方法来完成您所要求的操作,但是,如果您知道您的输入文件将包含空格分隔的标记,这些标记是 bash 的有效语法,那么类似以下的内容可以工作:

declare -a arr="($(<myfile))"

答案2

用这个:

IFS=$'\n' arr=( $(xargs -n1 <file) )
  • IFS=$'\n'将 bash 内部字段分隔符设置为换行符。
  • arr=( ... )数组定义。
  • xargs -n1 <file xargs读取file最多 1 个参数。引号中的字符串保持在一起,因为它们被读取为参数。

输出(每行一个元素):

$ printf "%s\n" "${arr[@]}"
a
bc
d e
f

相关内容