Unix / Linux - Shell Alıntı Mekanizmaları
Bu bölümde, Shell teklif verme mekanizmaları hakkında ayrıntılı olarak tartışacağız. Metakarakterleri tartışarak başlayacağız.
Metakarakterler
Unix Shell, herhangi bir Shell Komut Dosyasında kullanılırken özel anlamı olan ve alıntı yapılmadıkça bir kelimenin sonlandırılmasına neden olan çeşitli metakarakterler sağlar.
Örneğin, ? bir dizindeki dosyaları listelerken tek bir karakterle ve bir *birden fazla karakterle eşleşir. Kabuk özel karakterlerinin çoğunun listesi (meta karakter olarak da adlandırılır) -
* ? [ ] ' " \ $ ; & ( ) | ^ < > new-line space tab
Bir karakterin önüne bir \.
Misal
Aşağıdaki örnek, nasıl yazdırılacağını gösterir. * veya a ? -
#!/bin/sh
echo Hello; Word
Yürütme üzerine, aşağıdaki sonucu alacaksınız -
Hello
./test.sh: line 2: Word: command not found
shell returned 127
Şimdi alıntılanmış bir karakter kullanmayı deneyelim -
#!/bin/sh
echo Hello\; Word
Yürütme üzerine, aşağıdaki sonucu alacaksınız -
Hello; Word
$ işareti meta karakterlerden biridir, bu nedenle kabuk tarafından özel işlemden kaçınmak için alıntı yapılmalıdır -
#!/bin/sh
echo "I have \$1200"
Yürütme üzerine, aşağıdaki sonucu alacaksınız -
I have $1200
Aşağıdaki tablo, dört alıntı biçimini listeler -
Sr.No. | Alıntı ve Açıklama |
---|---|
1 | Single quote Bu tırnaklar arasında kalan tüm özel karakterler özel anlamlarını yitirir. |
2 | Double quote Bu alıntılar arasındaki çoğu özel karakter, bu istisnalarla özel anlamını yitirir -
|
3 | Backslash Ters eğik çizgiyi hemen takip eden herhangi bir karakter özel anlamını kaybeder. |
4 | Back quote Ters tırnak işaretleri arasında kalan her şey bir komut olarak değerlendirilir ve çalıştırılır. |
Tek Alıntılar
Birçok özel kabuk karakteri içeren bir echo komutunu düşünün -
echo <-$1500.**>; (update?) [y|n]
Her özel karakterin önüne ters eğik çizgi koymak sıkıcıdır ve satırın okunmasını zorlaştırır -
echo \<-\$1500.\*\*\>\; \(update\?\) \[y\|n\]
Çok sayıda karakterden alıntı yapmanın kolay bir yolu var. Dizenin başına ve sonuna tek bir tırnak (') koyun -
echo '<-$1500.**>; (update?) [y|n]'
Tek tırnak içindeki karakterler, her karakterin önünde ters eğik çizgi varmış gibi tırnak içine alınır. Bununla, echo komutu düzgün bir şekilde görüntülenir.
Çıktı alınacak bir dizede tek bir tırnak görünüyorsa, tüm dizeyi tek tırnak içine koymamalısınız, bunun yerine aşağıdaki gibi ters eğik çizgi (\) kullanmalısınız -
echo 'It\'s Shell Programming
Çift Alıntılar
Aşağıdaki kabuk komut dosyasını çalıştırmayı deneyin. Bu kabuk betiği tek alıntı kullanır -
VAR=ZARA
echo '$VAR owes <-$1500.**>; [ as of (`date +%m/%d`) ]'
Yürütme üzerine, aşağıdaki sonucu alacaksınız -
$VAR owes <-$1500.**>; [ as of (`date +%m/%d`) ]
Bu gösterilmesi gereken şey değil. Tek tırnakların değişken ikameyi engellediği açıktır. Değişken değerleri değiştirmek ve ters virgüllerin beklendiği gibi çalışmasını istiyorsanız, komutlarınızı aşağıdaki gibi çift tırnak içine almanız gerekir -
VAR=ZARA
echo "$VAR owes <-\$1500.**>; [ as of (`date +%m/%d`) ]"
Yürütme üzerine, aşağıdaki sonucu alacaksınız -
ZARA owes <-$1500.**>; [ as of (07/02) ]
Çift tırnak işaretleri, aşağıdakiler dışındaki tüm karakterlerin özel anlamını ortadan kaldırır -
$ parametre ikamesi için
Komut ikamesi için geriye dönük alıntılar
\$ gerçek dolar işaretlerini etkinleştirmek için
\` değişmez geri alıntıları etkinleştirmek için
\" gömülü çift tırnakları etkinleştirmek için
\\ gömülü ters eğik çizgileri etkinleştirmek için
Diğer tüm \ karakterler değişmezdir (özel değildir)
Tek tırnak içindeki karakterler, her karakterin önünde ters eğik çizgi varmış gibi tırnak içine alınır. Bu, echo komutunun düzgün görüntülenmesine yardımcı olur.
Çıktı alınacak bir dizede tek bir tırnak görünüyorsa, tüm dizeyi tek tırnak içine koymamalısınız, bunun yerine aşağıdaki gibi ters eğik çizgi (\) kullanmalısınız -
echo 'It\'s Shell Programming'
Arka Alıntılar
Araya herhangi bir Kabuk komutu koymak backquotes komutu yürütür.
Sözdizimi
İşte herhangi bir Kabuğu koymak için basit sözdizimi command geri alıntılar arasında -
var=`command`
Misal
date komut aşağıdaki örnekte çalıştırılmıştır ve elde edilen sonuç DATA değişkeninde saklanmıştır.
DATE=`date`
echo "Current Date: $DATE"
Yürütme üzerine, aşağıdaki sonucu alacaksınız -
Current Date: Thu Jul 2 05:28:45 MST 2009