这里是volumes.json:
{
"Volumes": [
{
"AvailabilityZone": "us-east-1a",
"Tags": [
{
"Value": "vol-rescue-system",
"Key": "Name"
}
],
"VolumeId": "vol-00112233",
},
{
"AvailabilityZone": "us-east-1a",
"Tags": [
{
"Value": "vol-rescue-swap",
"Key": "Name"
}
],
"VolumeId": "vol-00112234",
},
{
"AvailabilityZone": "us-east-1a",
"Tags": [
{
"Value": "vol-rescue-storage",
"Key": "Name"
}
],
"VolumeId": "vol-00112235",
}
]
}
我需要同时获取VolumeId
和Tags.Value
的值,以便将其用作调用另一个命令的输入。从JSON数组中获取单个值很容易,但我无法提取多个值并将其传递给另一个bash命令。
我可以使用以下方法获取单个值:
cat volumes.json |jq -r '.Volumes[].VolumeId' |while read v; do another_bash_command $v; done
但是我无法获取多个值,因为这是错误的:
cat volumes.json |jq -r '.Volumes[].VolumeId, .Volumes[].Tags[].Value' |while read v w; do another_bash_command $v $w; done
因此,循环的次数将从3次增加到6次。
并且,我如何将这些多个json值传递给bash数组,以便我可以更好地使用值?像VolumeId-> $arr [0] [0]
,Tags.Value-> $arr [0] [1]
,AvailabilityZone-> $arr [0] [2]
等。我已经在SO和jq文档中搜索过,并尝试过readarray
,但仍然无法找到解决方案:(感谢任何给予的帮助。
IFS=
部分似乎不正确。您应该将其删除或使用IFS=" "
来显式设置IFS为空格字符" "
。如果保留该部分,则volumeId
也将包含tagValue
,而tagValue
将为空。 - lanoxx