我有这个代码:
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
$