我得到以下字符串,并且试图将其转换为数组。
[ "aaa", "bbb" ]
有人可以让我知道是否可以将其转换为BASH数组。
答案 0 :(得分:0)
您可以使用jq
提取单个字符串,然后逐行读取它们:
myJsonArray='[ "aaa", "bbb", "more \"complex\"\u0020value" ]'
mapfile -t myBashArray < <(jq -r '.[]' <<< "$myJsonArray")
declare -p myBashArray
这将输出declare -a myBashArray=([0]="aaa" [1]="bbb" [2]="more \"complex\" value")
如果您还想支持带有换行符的元素,则可以使jq
输出NUL分隔的值,并且需要做更多的工作:
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
这将输出declare -a array=([0]=$'multi\nline\ndata' [1]=$'hostile\'"\n$(rm foo)data')
它确保数据中的NUL字节不会受到干扰,但是会将它们从输出中剥离。这不太重要,因为Bash变量首先不能表示NUL字节。