Azure CLI bash 循环不工作

Azure CLI bash 循环不工作

我正在尝试学习 bash 并减少对 PowerShell 的依赖,但遇到了看似简单的循环的问题。

下面是我尝试让循环返回每个虚拟机结果及其关联的名称、ID 和标签。

任何帮助深表感谢。

#Get a list of VMs with their name, id, and tags from Azure 
r=$(az vm list -g lab.rg1 --query "[].{name:name, id:id, tags:tags}") #--output tsv)

#take that list and do something. Currently just trying to echo each VM with it's name,id, and tags.
while read r
do
    echo $r
done

echo All Done

答案1

while read variable构造不读取 variable,它迭代其输入并存储每个记录作为 variable。所以你可以这样做:

command | while read r; do something with "$r"; done

或这个:

while read r; do something with "$r"; done < file

$r在您的情况下,您根本不需要该变量,请尝试以下操作:

az vm list -g lab.rg1 --query "[].{name:name, id:id, tags:tags}" |
  while read r
  do
     echo "$r"
  done
echo All Done

如果你绝对必须使用该$r变量,你可以这样做:

r=$(az vm list -g lab.rg1 --query "[].{name:name, id:id, tags:tags}")

## print the value of the variable and pass that to the loop
printf '%s\n' "$r" |
  while read line
  do
     echo "$line"
  done
echo All Done

相关内容