私はこのコードを持っています:
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
$