Weisen Sie einer Variablen innerhalb einer Schleife einen Wert zu

Weisen Sie einer Variablen innerhalb einer Schleife einen Wert zu

Ich habe diesen Code:

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

Die Variable HOSTSNist leer. Können Sie mir sagen, warum?

Antwort1

HOSTSN ist leer, da es zum Zeitpunkt der

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

Ausführung. Die Verwendung von echo \${HOSTSN}stattdessen behebt das Problem.

Betrachten Sie dieses Beispiel. Hier wird eine Datei „foo“ erstellt. Der Inhalt wird zum Zeitpunkt der Dateierstellung nicht ausgeführt. Es $NAMEist also nichts festgelegt.

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

$ cat foo
Hello
$

Durch die Einführung eines \Zeichens wird die Variable bei der Dateierstellung nicht ausgewertet.

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

$ cat foo
Hello Steve
$

verwandte Informationen