为循环内的变量赋值

为循环内的变量赋值

我有这个代码:

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
$

相关内容