我正在尝试学习 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