GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara kerja cat << EOF di bash?

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:

  1. Tag dapat berupa string apa pun, huruf besar atau huruf kecil, meskipun kebanyakan orang menggunakan huruf besar berdasarkan konvensi.
  2. 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.
  3. 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

Linux
  1. Bagaimana Cara Kerja Awk ‘!a[$0]++’?

  2. Bagaimana Cara Kerja Sticky Bit?

  3. Tujuan .bashrc Dan Bagaimana Cara Kerjanya?

  1. Ssh – Bagaimana Tcp-keepalive Bekerja Di Ssh?

  2. Cara Memeriksa apakah String Berisi Substring di Bash

  3. Bagaimana rm bekerja? Apa yang rm lakukan?

  1. Bagaimana saya bisa memeriksa karakter kata demi kata dari string perintah bash?

  2. Bagaimana bash menguji 'false'?

  3. Bagaimana cara kerja perintah ps?