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?

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. [...]


Vous pouvez également utiliser des guillemets doubles ( cat << "==end" > test), mais les guillemets durs empêchent effectivement la substitution.
Mat
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.