ループ内の変数に値を割り当てる

ループ内の変数に値を割り当てる

私はこのコードを持っています:

HOSTS="host1 host2"
    For hostname in ${HOSTS} ;
do ssh -tt ${USERNAME}@${hostname} << EOF
HOSTSN="test"
echo ${HOSTSN}
exit
EOF
Done 

変数がHOSTSN空です。理由を教えてもらえますか?

ベストアンサー1

HOSTSNは実行時に評価されているため空です。

do ssh -tt ${USERNAME}@${hostname} << EOF

実装する。これを使用してecho \${HOSTSN}問題を解決してください。

この例を考えてみましょう。ここに「foo」というファイルが作成されます。ファイル作成時に内容は実行されません。だから$NAME何も設定されていません。

$ cat >foo <<EOF
NAME=Steve
echo Hello ${NAME}
EOF
$

$ cat foo
Hello
$

文字を導入すると、\ファイルの作成時に変数は評価されません。

$ cat >foo <<EOF
NAME=Steve
echo Hello \${NAME}
EOF
$

$ cat foo
Hello Steve
$

おすすめ記事