SORU
19 EYLÜL 2008, Cuma


Nasıl bash joker/yıldız karakteri kaçış mı?

örn.

me$ FOO="BAR * BAR"
me$ echo $FOO
BAR file1 file2 file3 file4 BAR

ve kullanma "" kaçış karakteri: . \

me$ FOO="BAR \* BAR"
me$ echo $FOO
BAR \* BAR

Belli ki aptalca bir şey yapıyorum.

Nasıl çıktı alabilirim "BAR * BAR" ?

CEVAP
19 EYLÜL 2008, Cuma


KISA CEVAP

Herkesin dediği gibi - her zaman değişkenler garip davranışları önlemek için anlatmalısın. Bu yüzden kullanın"$foo" . echo yerine sadeceecho $foo.

UZUN CEVAP

Bu örnek, daha bunun yüzünde görünebilir daha var, çünkü daha fazla açıklama emirleri düşünüyorum.

Kabuk belli ki yaptığını da karışıklık ilk örnek kaçtın sonra gelir muhtemelen kendi kendine düşündü: görebiliyorum

  1. Parametre genişleme
  2. Dosyaismi yorumlaması

İlk örnek:

me$ FOO="BAR * BAR"
me$ echo $FOO

Sonra parametre genişleme eşdeğerdir:

me$ echo BAR * BAR

Ve dosyaismi yorumlaması eşdeğerdir sonra:

me$ echo BAR file1 file2 file3 file4 BAR

Ve sadece komut satırına echo BAR *BAR * * eğer eşdeğer olduğunu göreceksiniz.

Muhtemelen sizin için bu yüzden ben *, filename genişleme engelleyebiliyorum kaçış"

İkinci örnek:

me$ FOO="BAR \* BAR"
me$ echo $FOO

Sonra parametre genişleme eşdeğer olmalıdır:

me$ echo BAR \* BAR

Ve dosyaismi yorumlaması için eşdeğer olmalıdır sonra:

me$ echo BAR \* BAR

Ve eğer yazmaya çalışırsanız "BAR \ *" gerçekten baskı "* BAR filename genişleme kaçış engellenmiştir, çünkü". BAR olacak Komut satırını doğrudan içine BAR echo

Neden $foo kullanarak iş değil yani?

Yer - Alıntı Kaldırılması gereken üçüncü bir genişleme var çünkü. Bash manuel kaldırılması alıntı:

Sonra önceki açılımları, tüm karakterlerin tırnaksız oluşumları ‘ \ ’ , ‘ ’ ve"’ neden değil ‘ açılımları olan bir kaldırıldı.

O yüzden ne olur ne zaman yazdığınız komut doğrudan komut satırı, çıkış karakteri değil sonuç bir önceki genişleme yani BASH kaldırır onu göndermeden önce onu echo komutu, ama 2. örneğin, "\ * " sonuç, bir önceki Parametre genişleme, öyle bir şey YOK, kaldırıldı. Sonuç olarak, echo alır "\*" yazdırır.

İlk örnek arasındaki fark not - "*" Alıntı Temizleme tarafından çıkarılacak olan karakterleri dahil değildir.

Bu mantıklı umuyoruz. Sonunda aynı sonuç - sadece tırnak işaretleri. Ben sadece mantıklı eğer tek Parametre ve Dosyaismi yorumlaması oynayan varsa çalışmalıdır kaçan, işe yaramadı nedenini açıklamak istedim.

BASH açılımları tam bir açıklama için, bakınız:

http://www.gnu.org/software/bash/manual/bashref.html#Shell-Expansions

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • filmurfreakur

    filmurfreaku

    29 Mart 2007
  • bored before i even began

    bored before

    30 Mart 2009
  • thegeniuses.tv

    thegeniuses.

    11 Aralık 2006