将带有多个参数的 shell 命令的输出存储到一个数组中

Store output of shell command with multiple arguments into an array

我正在尝试使用 shell 将我的 Terraform 工作区的状态存储在一个数组中。

我正在尝试这种通常对我有用的方法:

declare -a workspace_list=( $(terraform workspace list))

for a in $(seq 0 ${#workspace_list[*]})
do  
    if [[ -z ${workspace_list[$a]} ]]
        then  
              break
        fi
    echo $(($a+1))": "${workspace_list[$a]}
    a=$(($a+1))
done

但是,它为我提供了一个输出,其中包含目录中的所有文件以及工作区。

我猜这与 terraform 命令的多个参数有关。请帮忙。

terraform workspace list的输出供参考

当您使用 terraform 命令的结果初始化数组时,它看起来像:

declare -a workspace_list=( * default dev-singapore)

这里,*是glob-expanded列出当前目录下的所有文件。

您可以去掉星号,只处理 terraform 的输出。

declare -a workspace_list=($(terraform workspace list | sed 's/*//'))

不幸的是,与 terraform plan 不同,terraform workspace 没有 JSON 输出选项,后者会更干净。