Comment passer des variables à un HEREDOC en bash?

16

Je veux faire quelque chose comme ça:

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

$ cat test
My name is John

Des idées?

ChocoDeveloper
la source

Réponses:

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

ou même

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

A travaillé pour moi.

On dirait que lorsque vous prenez ==endla 'variable ne se substitue pas.

ah, le voici dans la page de manuel (regardez 3.6.6):

Le format des documents ici est:

      <<[-]word
              here-document
      delimiter

Aucune expansion de paramètre, substitution de commande, expansion arithmétique ou expansion de nom de chemin n'est effectuée sur Word . Si des caractères dans word sont cités, le délimiteur est le résultat de la suppression des guillemets sur word, et les lignes du document ici ne sont pas développées. Si le mot n'est pas cité, toutes les lignes du document ici sont soumises à l'expansion des paramètres, à la substitution de commande et à l'expansion arithmétique. [...]

se ruer
la source
Vous pouvez également utiliser des guillemets doubles ( cat << "==end" > test), mais les guillemets durs empêchent effectivement la substitution.
Mat