Asignar un valor a una variable dentro de un bucle

Asignar un valor a una variable dentro de un bucle

Tengo este código:

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

La variable HOSTSNestá vacía, ¿puedes decirme por qué?

Respuesta1

HOSTSN está vacío porque se está evaluando en el momento del

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

ejecución. Usarlo echo \${HOSTSN}en su lugar lo solucionará.

Considere este ejemplo. Aquí se crea un archivo 'foo'. Los contenidos no se ejecutan en el momento de la creación del archivo. Entonces $NAMEno está configurado para nada.

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

$ cat foo
Hello
$

Al introducir un \carácter, la variable no se evalúa en el momento de la creación del archivo.

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

$ cat foo
Hello Steve
$

información relacionada