Sadık KILIÇ

Web Tabanlı Hafıza Yerleşimi

Here documents

Here document, interaktif bir programa veya komuta girdi(input) olarak yönlendirilen text veya kod bloklarıdır. Ayrıca heredoc, hereis, here-string, here-script olarak da anılır.

Genel kullanımı:

KOMUT << [-]AYIRICI
komutun kullanacagi metin
komuta yönlendirilecek baska bir metin daha
AYIRICI

Not: Ayırıcı önünde – kullanılırsa, input bloğundaki satır başında yer alan tab karakterleri dikkate alınmaz, ama boşluk karakteri etkilenmez. Başka bir deyişle daha okunabilir scriptlerin yazılması için kullanılır.

Örnek:
kucuk-büyük harf dönüşümü yapmak istediğimiz metni tr komutuna şu şekilde yönlendirebiliriz.

tr a-z A-Z <<END_TEXT
mazhar fuat ozkan
metin ali feyyaz
END_TEXT
MAZHAR FUAT OZKAN
METIN ALI FEYYAZ

Yukardaki kullanim, aşağıdaki olduğu gibi bir dosyayı input olarak bir komuta yönlendirmeye denktir.
komut < dosya.txt

tr a-z A-Z < kelimeler.txt

Ayırıcı olarak istenilen bir sözcük kullanılabilir. Ayırıcı çift tırnak içerisinde değilse, blokta kullanılan parametrenin içeriği kullanılır. Aksi taktirde parametrenin ismi kalır.

Aşağıdaki heredoc1.sh ve heredoc2.sh isimli betikleri incelerseniz daha anlaşılır olacaktır.

cat heredoc1.sh 
#!/bin/bash
TARIH=`date "+%Y-%d-%m"`
cat<<EOF
Merhaba Dunya
        Bugun $TARIH
EOF
exit
cat heredoc2.sh 
#!/bin/bash
TARIH=`date "+%Y-%d-%m"`
cat<<"EOF"
Merhaba Dunya
        Bugun $TARIH
EOF
exit

Yukardaki iki betik arasındaki tek fark EOF isimli ayırıcının tırnak içerisinde kullanılması. Bunları çalıştırınca çıktılardan ayırıcının tırnak içinde kullanmasının etkisi görülebilir.

./heredoc1.sh 
Merhaba Dunya
        Bugun 2012-12-07
./heredoc2.sh 
Merhaba Dunya
        Bugun $TARIH

Ek olarak ayırıcı önünde – (tire) kullanılsaydı baştaki tab karakteri yoksayılacaktı. EOF önünde – koyup scripti yeniden çalıştıralım.

cat heredoc2.sh 
#!/bin/bash
TARIH=`date "+%Y-%d-%m"`
cat<<-EOF
Merhaba Dunya
        Bugun $TARIH
EOF
exit
./heredoc3.sh 
Merhaba Dunya
Bugun 2012-12-07

Görüldüğü gibi çıktıda, satır başındaki tab karakteri yok sayıldı.

2 thoughts on “Here documents

Leave a Reply

Your email address will not be published. Required fields are marked *