我有這個代碼:
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
$