Bash 在json数组中循环不起作用-jq

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表现出这种奇怪的行为?有什么解决办法吗

我有一个JSON数组conf=

我想循环浏览它的项目。因此,我做了以下工作:

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}”|
替换为