Come passare le variabili a un HEREDOC in bash?


16

Voglio fare qualcosa del genere:

$ NAME=John
$ cat << '==end' > test
My name is $NAME
==end

$ cat test
My name is John

Qualche idea?

Risposte:


24
cat <<EOF > test
My name is $NAME
EOF

o anche

cat <<==end > test
My name is $NAME
==end

Ha funzionato per me.

Sembra che quando si accetta ==endla 'variabile non sostituisce.

ah, eccolo nella pagina man (vedi 3.6.6):

Il formato dei documenti qui è:

      <<[-]word
              here-document
      delimiter

Nessuna espansione di parametro, sostituzione di comando, espansione aritmetica o espansione del percorso viene eseguita su word . Se vengono citati caratteri nella parola , il delimitatore è il risultato della rimozione della citazione nella parola e le righe nel documento qui non vengono espanse. Se la parola non è quotata, tutte le righe del documento qui sono soggette all'espansione dei parametri, alla sostituzione dei comandi e all'espansione aritmetica. [...]


Puoi anche usare le virgolette ( cat << "==end" > test), ma le virgolette impediscono davvero la sostituzione.
Mat
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.