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?

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


Você também pode usar aspas duplas ( cat << "==end" > test), mas as aspas rígidas impedem a substituição.
Mat
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.