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

関連情報