¿Cómo pasar variables a un HEREDOC en bash?

16

Quiero hacer algo como esto:

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

$ cat test
My name is John

¿Algunas ideas?

ChocoDeveloper
fuente

Respuestas:

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

o incluso

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

Trabajó para mi.

Parece que cuando tomas ==endla 'variable no sustituye.

Ah, aquí está en la página de manual (ver 3.6.6):

El formato de los documentos aquí es:

      <<[-]word
              here-document
      delimiter

No se realiza expansión de parámetros, sustitución de comandos, expansión aritmética o expansión de nombre de ruta en Word . Si se citan caracteres en palabras , el delimitador es el resultado de la eliminación de comillas en palabras, y las líneas en el documento aquí no se expanden. Si la palabra no está entre comillas, todas las líneas del documento aquí están sujetas a expansión de parámetros, sustitución de comandos y expansión aritmética. [...]

prisa
fuente
También puede usar comillas dobles ( cat << "==end" > test), pero las comillas rígidas evitan la sustitución.
Mat