為循環內的變數賦值

為循環內的變數賦值

我有這個代碼:

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
$

相關內容