You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 05:15:39