Azure存储账户容器遍历问题:Bash数组元素索引异常
解决Azure CLI容器列表转Bash数组索引异常问题
问题根源
你的数组索引异常是因为错误的文本预处理步骤导致的:
az storage container list的-otsv输出是每行一个容器名,但echo $raw_containers_string会将换行符自动转换为空格,后续tr ' ' "\n"的操作完全多余,反而引入空元素。- 直接用
containers=($(...))这种无引号的数组赋值,会让Bash对输出进行分词处理,若原始输出存在空行或开头/结尾空白,就会生成空的数组元素,导致索引偏移。
正确解决方案
直接将Azure CLI的输出读取到数组,跳过多余的预处理步骤,推荐两种写法:
方法1:用readarray(Bash 4.0+ 支持)
# 直接将每行输出存入数组,自动忽略末尾换行 readarray -t containers_array < <(az storage container list --account-name acc-name --account-key 'key_value' --query '[].{name:name}' -otsv)
方法2:兼容旧版Bash的while循环
containers_array=() # 逐行读取,过滤空行后加入数组 while IFS= read -r container; do [[ -n $container ]] && containers_array+=("$container") done < <(az storage container list --account-name acc-name --account-key 'key_value' --query '[].{name:name}' -otsv)
验证数组与遍历
正确访问数组元素
echo "${containers_array[0]}" # 输出:123 echo "${containers_array[1]}" # 输出:container1
安全遍历数组
遍历数组时务必用双引号包裹变量,避免容器名含空格时出错:
for container in "${containers_array[@]}"; do echo "==== Blobs in container $container ====" az storage blob list --container-name "$container" \ --account-name "$sa_name" \ --account-key "$key" \ --query "[].{name:name}" --output tsv done
内容的提问来源于stack exchange,提问作者feedthemachine
相关产品推荐
相关产品推荐

