如何将文本文件中的字符串转换为Bash中的数组

时间:2019-06-20 19:55:06

标签: arrays bash shell file

我有一个包含单引号内引号的文本文件。他们是“不是”一个班轮。例如,同一行中可能有两个引号,但所有引号都在单引号之内,例如

'hello world' 'this is the second quotes' 'and this is the third quoted text'

如何创建一个数组并使每个引用的文本成为数组的元素。我尝试使用

declare -a arr=($(cat file.txt))

但是这使它在空间上分开了。为每个单词分配数组中的一个元素

1 个答案:

答案 0 :(得分:1)

如果您具有bash v4.4或更高版本,则可以使用xargs解析带引号的字符串并将其转换为以空分隔的字符串,然后使用readarray将其转换为bash数组:< / p>

readarray -t -d '' arr < <(xargs printf '%s\0' <file.txt)

如果您使用较旧的bash版本,则必须按元素逐个创建数组:

arr=( )
while IFS= read -r -d '' quote; do
  arr+=( "$quote" )
done < <(xargs printf '%s\0' <file.txt)

请注意,xargs引用语法与其他所有语法(当然)有所不同。它允许单引号和双引号的字符串,但不允许在这些字符串中使用转义引号。在xargs的各个版本之间可能有所不同。