Bagaimana cara mengirimkan variabel ke HEREDOC di bash?

16

Saya ingin melakukan sesuatu seperti ini:

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

$ cat test
My name is John

Ada ide?

ChocoDeveloper
sumber

Jawaban:

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

atau bahkan

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

Bekerja untukku.

Terlihat seperti ketika Anda mengambil ==enddalam 'variabel tidak menggantikan.

ah, ini dia di halaman manual (lihat 3.6.6):

Format di sini-dokumen adalah:

      <<[-]word
              here-document
      delimiter

Tidak ada perluasan parameter, substitusi perintah, ekspansi aritmatika, atau ekspansi pathname dilakukan pada kata . Jika ada karakter dalam kata yang dikutip, pembatas adalah hasil dari penghapusan kutipan pada kata, dan garis-garis dalam dokumen di sini tidak diperluas. Jika kata tidak dikutip, semua baris dokumen di sini mengalami perluasan parameter, penggantian perintah, dan ekspansi aritmatika. [...]

buru-buru
sumber
Anda juga dapat menggunakan tanda kutip ganda ( cat << "==end" > test), tetapi tanda kutip memang mencegah substitusi.
Mat