我有一个脚本,要用于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