BASH-将数组字符串转换为数组

BASH-将数组字符串转换为数组,bash,shell,Bash,Shell,我得到下面的字符串,我正试图将其转换为数组 [“aaa”、“bbb”] 有人能告诉我是否有办法将其转换为BASH数组吗 您可以使用jq提取单个字符串,然后逐行读取它们: myJsonArray='[ "aaa", "bbb", "more \"complex\"\u0020value" ]' mapfile -t myBashArray < <(jq -r '.[]' <<< "$myJsonArray") declare -p myBashArray 这将输出d

我得到下面的字符串,我正试图将其转换为数组

[“aaa”、“bbb”]


有人能告诉我是否有办法将其转换为BASH数组吗

您可以使用
jq
提取单个字符串,然后逐行读取它们:

myJsonArray='[ "aaa", "bbb", "more \"complex\"\u0020value" ]'
mapfile -t myBashArray < <(jq -r '.[]' <<< "$myJsonArray")
declare -p myBashArray
这将输出
declare-a数组=([0]=$'multi\nline\ndata'[1]=$'敌对\'“\n$(rm foo)数据”)


它确保数据中的NUL字节不受干扰,但它们将从输出中剥离。这不太重要,因为Bash变量首先不能表示NUL字节。

这是一个包含JSON字符串的JSON数组吗?是的,我想是的,我正在将其作为输出的一部分。如果可以通过编程方式定义解析器的话对于字符串,则可以将其转换为bash数组
myJsonArray='[ "multi\nline\ndata", "hostile'\''\"\u0000\n$(rm foo)data" ]'
array=()
while IFS= read -r -d '' line
do
  array+=("$line")
done < <(jq -j '(.[] | gsub("\u0000"; "")) + "\u0000"' <<< "$myJsonArray")

declare -p array