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