【发布时间】:2023-03-15 16:43:01
【问题描述】:
当我这样做时:
arr=($(echo '{"crew":[{"name":"kirk"},{"name":"bones"},{"name":"mr spock"}]}' | jq -r '.crew[].name | @sh'))
我明白了:
echo "${arr[2]}"
mr
echo "${arr[3]}"
spock
但是当我这样做时:
arr=("kirk" "bones" "mr spock")
我明白了:
echo "${arr[2]}"
mr spock
为什么在第一个示例中,bash 在创建数组时会忽略每个 jq 值所包含的引号?
【问题讨论】:
-
你使用 jq -r 去掉了引号
-
@RamanSailopal jq 运算符
@sh转义输出,根据 jq 手册:“输入已转义,适合在 POSIX shell 的命令行中使用。如果输入是数组,输出将是一系列以空格分隔的字符串。” -
你能不能... readarray -t arr
-
@RamanSailopal 是的,
readarray似乎有效。谢谢你。但是,我仍然很想知道为什么 bash 似乎删除/忽略了 jq 包装值的引号。 -
@JonHudson 见"Why does shell ignore quoting characters in arguments passed to it through variables?"(情况不同,但分词过程完全一样)。