Присвоить значение переменной внутри цикла

Присвоить значение переменной внутри цикла

У меня есть этот код:

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
$

Связанный контент