Atribuir um valor a uma variável dentro de um loop

Atribuir um valor a uma variável dentro de um loop

Eu tenho esse código:

HOSTS="host1 host2"
    For hostname in ${HOSTS} ;
do ssh -tt ${USERNAME}@${hostname} << EOF
HOSTSN="test"
echo ${HOSTSN}
exit
EOF
Done 

A variável HOSTSNestá vazia, você pode me dizer por quê?

Responder1

HOSTSN está vazio porque está sendo avaliado no momento do

do ssh -tt ${USERNAME}@${hostname} << EOF

execução. Usar echo \${HOSTSN}em vez disso irá consertar o problema.

Considere este exemplo. Aqui um arquivo 'foo' é criado. O conteúdo não é executado no momento da criação do arquivo. Portanto, $NAMEnão está definido para nada.

$ cat >foo <<EOF
NAME=Steve
echo Hello ${NAME}
EOF
$

$ cat foo
Hello
$

Ao introduzir um \caractere, a variável não é avaliada no momento da criação do arquivo.

$ cat >foo <<EOF
NAME=Steve
echo Hello \${NAME}
EOF
$

$ cat foo
Hello Steve
$

informação relacionada