Como passar variáveis ​​para um HEREDOC no bash?

16

Eu quero fazer algo assim:

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

$ cat test
My name is John

Alguma ideia?

ChocoDeveloper
fonte

Respostas:

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

ou mesmo

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

Trabalhou para mim.

Parece que quando você pega ==enda 'variável não substitui.

ah, aqui está na página do manual (veja 3.6.6):

O formato dos documentos aqui é:

      <<[-]word
              here-document
      delimiter

Nenhuma expansão de parâmetro, substituição de comando, expansão aritmética ou expansão de nome de caminho é executada no word . Se algum caractere no word for citado, o delimitador é o resultado da remoção de aspas no word e as linhas no documento aqui não são expandidas. Se a palavra não estiver entre aspas, todas as linhas do documento aqui estão sujeitas a expansão de parâmetro, substituição de comando e expansão aritmética. [...]

pressa
fonte
Você também pode usar aspas duplas ( cat << "==end" > test), mas as aspas rígidas impedem a substituição.
Mat