用于azure cli查询的Bash脚本,输出不完全符合我的要求



我有一个脚本,要用于Azure返回资源组、存储帐户名、存储容器名、blob对象的名称、blob对象大小和存储层。

我有以下内容:

#!/bin/bash
resourceGroup=$1
storageAccount=$2
containers="$(az storage container list --account-name $2 --auth-mode login --query "[].[name]" -o tsv)"
for c in $containers
do
blob_info=$(az storage blob list --account-name $2 
--auth-mode login --container-name ${c} 
--query "[].[container,name,properties.contentLength,properties.blobTier]" 
-o tsv)
echo "$resourceGroup,$storageAccount,$blob_info" | tr 't' ','
done

当JSON中有多个blob项目时,我希望输出显示资源组和存储帐户,以及每个blob项目的完整blob_info,如下所示:

$resourceGroup,$storageAccount,$blob_info
$resourceGroup,$storageAccount,$blob_info

然而,当一个JSON中有两个blob项时,输出看起来是这样的(它不会为同一JSON输出中的第二个blob项回显$resourceGroup,$storageAccount(。

$resourceGroup,$storageAccount,$blob_info
$blob_info

我想这是我一定错过的一些简单的东西。

这样的东西应该更正确:

#!/bin/bash
resourceGroup=$1
storageAccount=$2
IFS=$'tn' read -d '' -r -a containers < <(
az storage container list 
--auth-mode login 
--account-name "$storageAccount" 
--query '[].[name]' 
-o tsv
)
# unescape TSV values
for i in "${!containers[@]}"
do
printf -v 'containers[i]' %b "${containers[i]}"
done
for container in "${containers[@]}"
do
while IFS='' read -r blob_info
do
printf '%bn' "$(tr 't' ',' <<< "$resourceGroup,$storageAccount,$blob_info")"
done < <(
az storage blob list 
--auth-mode login 
--account-name "$storageAccount" 
--container-name "$container" 
--query '[].[container,name,properties.contentLength,properties.blobTier]'  
-o tsv
)
done

最新更新