In breve, utilizzare:
- parole chiave ereditate non quotate, ad es.
EOF
- carattere regolare del dollaro per variabili esterne (cioè locali ), ad es.
$FOO
- carattere dollaro sfuggito per variabili interne (cioè remote ), ad es
\$BAR
Se lasci la parola chiave heredoc (cioè EOF
) non quotata, il corpo ereditario viene elaborato localmente, quindi $FOO
viene espanso foo
e BAR
espanso nella stringa vuota. Quindi il tuo ssh
comando diventa:
BAR="bar"
echo "FOO=foo"
echo "BAR="
Se citi la parola chiave heredoc, l'espansione della variabile viene soppressa, in modo che il tuo ssh
comando diventi questo invece:
BAR="bar"
echo "FOO=$FOO"
echo "BAR=$BAR"
Poiché FOO
probabilmente non è definito nell'ambiente di shell remoto, l'espressione "FOO=$FOO"
viene valutata come "FOO=''"
, ovvero FOO
è impostata su una stringa vuota.
Se si desidera utilizzare entrambe le variabili, è necessario lasciare la parola chiave heredoc senza virgolette, in modo che l'espansione della variabile avvenga per la variabile definita localmente e quindi sfuggire (con una barra rovesciata) alla variabile che si desidera espandere a distanza, ovvero :
#!/bin/sh
FOO="foo"
ssh some.remote.host << EOF
BAR="bar"
echo "FOO=$FOO"
echo "BAR=\$BAR"
EOF
In questo caso il comando ssh (come ricevuto dal server remoto) sarà il seguente:
BAR="bar"
echo "FOO=foo"
echo "BAR=$BAR"