
У меня есть этот код:
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
$