cat <<EOF
sintaks sangat berguna saat bekerja dengan teks multi-baris di Bash, misalnya. saat menetapkan string multi-baris ke variabel shell, file, atau pipa.
Contoh cat <<EOF
penggunaan sintaks di Bash:
1. Tetapkan string multibaris ke variabel shell
$ sql=$(cat <<EOF
SELECT foo, bar FROM db
WHERE foo='baz'
EOF
)
$sql
variabel sekarang juga menampung karakter baris baru. Anda dapat memverifikasi dengan echo -e "$sql"
.
2. Lewati string multi-baris ke file di Bash
$ cat <<EOF > print.sh
#!/bin/bash
echo \$PWD
echo $PWD
EOF
print.sh
file sekarang berisi:
#!/bin/bash
echo $PWD
echo /home/user
3. Lewati string multi-baris ke pipa di Bash
$ cat <<EOF | grep 'b' | tee b.txt
foo
bar
baz
EOF
b.txt
file berisi bar
dan baz
baris. Output yang sama dicetak ke stdout
.
Ini disebut heredoc format untuk memberikan string ke stdin. Lihat https://en.wikipedia.org/wiki/Here_document#Unix_shells untuk detail selengkapnya.
Dari man bash
:
Ini Dokumen
Jenis pengalihan ini menginstruksikan shell untuk membaca masukan dari sumber saat ini hingga baris yang hanya berisi kata (tanpa tanda kosong) terlihat.
Semua baris yang dibaca hingga saat itu kemudian digunakan sebagai input standar untuk sebuah perintah.
Format dokumen di sini adalah:
<<[-]word here-document delimiter
Tidak ada perluasan parameter, substitusi perintah, perluasan aritmatika, atau perluasan nama jalur yang dilakukan padakata . Jika ada karakter di kata dikutip, pembatas adalah hasil dari penghapusan kutipan pada kata , dan baris dalam dokumen-di sini tidak diperluas.Jika kata tanpa tanda kutip, semua baris dokumen-di sini mengalami ekspansi parameter, substitusi perintah, dan ekspansi aritmatika. Dalam kasus terakhir, urutan karakter
\<newline>
diabaikan, dan\
harus digunakan untuk mengutip karakter\
,$
, dan`
.Jika operator pengalihan adalah
<<-
, lalu semua karakter tab awal dihapus dari baris input dan baris yang berisi pembatas . Hal ini memungkinkan dokumen di sini di dalam skrip shell untuk diindentasi secara alami.
Dalam kasus Anda, "EOF" dikenal sebagai "Here Tag". Pada dasarnya <<Here
memberi tahu shell bahwa Anda akan memasukkan string multiline hingga "tag" Here
. Anda dapat menamai tag ini sesuai keinginan, biasanya EOF
atau STOP
.
Beberapa aturan tentang tag Di Sini:
- Tag dapat berupa string apa pun, huruf besar atau huruf kecil, meskipun kebanyakan orang menggunakan huruf besar berdasarkan konvensi.
- Tag tidak akan dianggap sebagai tag Di Sini jika ada kata lain di baris tersebut. Dalam hal ini, itu hanya akan dianggap sebagai bagian dari string. Tag tersebut harus berdiri sendiri di baris terpisah, untuk dianggap sebagai tag.
- Tag tidak boleh memiliki spasi di awal atau akhir di baris tersebut untuk dianggap sebagai tag. Jika tidak maka akan dianggap sebagai bagian dari string.
contoh:
$ cat >> test <<HERE
> Hello world HERE <-- Not by itself on a separate line -> not considered end of string
> This is a test
> HERE <-- Leading space, so not considered end of string
> and a new line
> HERE <-- Now we have the end of the string