Bash 在json数组中循环不起作用-jq
我有一个JSON数组conf= 我想循环浏览它的项目。因此,我做了以下工作:Bash 在json数组中循环不起作用-jq,bash,jq,Bash,Jq,我有一个JSON数组conf= 我想循环浏览它的项目。因此,我做了以下工作: for configy in $(echo "${conf}" | jq -r ".[]"); do echo configy=$configy done 结果如下: configy={ configy="fraudThreshold": configy=4, configy="fraudTTLSec": 等等 它使用空格分割字符串,并逐个给出结果。 为什么bash表现出这种奇怪的行为?有什么解决办法吗
for configy in $(echo "${conf}" | jq -r ".[]"); do
echo configy=$configy
done
结果如下:
configy={
configy="fraudThreshold":
configy=4,
configy="fraudTTLSec":
等等
它使用空格分割字符串,并逐个给出结果。
为什么bash表现出这种奇怪的行为?有什么解决办法吗
此外,当我这样做时,它会给出适当的值:
configy=$(echo $conf | jq .[-1])
echo configy=$configy
结果:
configy={ "fraudThreshold": 44, "fraudTTLSec": 60 }
为了使用bash循环JSON数组中的项,您可以编写:
echo "${conf}" | jq -cr ".[]" |
while read -r configy
do
echo configy="$configy"
done
这将产生:
configy={"fraudThreshold":4,"fraudTTLSec":60}
configy={"fraudThreshold":44,"fraudTTLSec":60}
但是,几乎肯定有更好的方法来实现您的最终目标。为了使用bash循环JSON数组中的项,您可以编写:
echo "${conf}" | jq -cr ".[]" |
while read -r configy
do
echo configy="$configy"
done
echo "${conf}" | jq -car '.[] | "configy=" + tojson'
这将产生:
configy={"fraudThreshold":4,"fraudTTLSec":60}
configy={"fraudThreshold":44,"fraudTTLSec":60}
然而,几乎可以肯定的是,有更好的方法来实现你的最终目标
echo "${conf}" | jq -car '.[] | "configy=" + tojson'
产生:
configy={"fraudThreshold":4,"fraudTTLSec":60}
configy={"fraudThreshold":44,"fraudTTLSec":60}
产生:
configy={"fraudThreshold":4,"fraudTTLSec":60}
configy={"fraudThreshold":44,"fraudTTLSec":60}
它使用空格分割字符串,并逐个给出结果。为什么bash表现出这种奇怪的行为
这种行为一点也不奇怪。见:
shell扫描参数扩展的结果,命令
替换,以及在
双引号用于分词
有什么解决办法吗 M–tt Frëman和peak提出了工作解决方案;您可以通过将
echo“${conf}”|
替换为
它使用空格分割字符串,并逐个给出结果。为什么bash表现出这种奇怪的行为
这种行为一点也不奇怪。见:
shell扫描参数扩展的结果,命令
替换,以及在
双引号用于分词
有什么解决办法吗
M–tt Frëman和peak提出了工作解决方案;您可以通过将echo“${conf}”|
替换为