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

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

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

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
$

関連情報