なぜ別の変数値を取得するのですか?

なぜ別の変数値を取得するのですか?

リモートコンピュータでsdbサイズのサイズを取得したい場合 - マスター

わかりました:

#  ssh master "lsblk | grep \"^sdb\" | awk '{print \$4}' "
100G

しかし、

変数にサイズ値を設定して印刷しようとすると、次のような結果が得られます。

# VAR=` ssh master "lsblk | grep \"^sdb\" | awk '{print \$4}' " `
# echo $VAR
sdb 8:16 0 100G 0 disk

なぜ最終テストでは100Gサイズしか提供されないのですか?

ここで何が違いますか?

答え1

ローカルで実行できるタスクをリモートで実行しないでください。

var=$( ssh master lsblk | awk '/^sdb/ { print $4 }' )

値がsdb変数にある場合(以下の説明を参照):

var=$( ssh master lsblk | awk -v disk="$variable" '$0 ~ disk { print $4 }' )

または行の先頭から強制的に一致させるには

var=$( ssh master lsblk | awk -v disk="$variable" '$0 ~ "^" disk { print $4 }' )

答え2

別のバックスラッシュを追加する必要があります。

VAR=` ssh master "lsblk | grep \"^sdb\" | awk '{print \\$4}' " `
echo $VAR
100G

関連情報