Ne oluyor
Kabuk (bash) argümanı görür [a-z]
. Bu , herhangi bir küçük harfle eşleşen bir joker desendir (bir glob ). Bu nedenle, kabuk bu kalıpla eşleşen bir dosya adı arar. Üç durum vardır:
- Geçerli dizindeki hiçbir dosyanın tek bir küçük harfli adı yoktur. Sonra kabuk değişmeden joker desen bırakır ve
tr
argümanları görür -d
ve [a-z]
. Makinelerinizin çoğunda olan budur.
- Geçerli dizindeki tek bir dosyanın adı tek küçük harftir. Daha sonra kabuk deseni bu dosya adına genişletir ve
tr
argümanları -d
ve dosya adını görür . Bu sunucuda gerçekleşir ve mektubu sildiğini o
görebildiğimiz için eşleşen dosya çağrılır .tr
o
- Geçerli dizindeki iki veya daha fazla dosya, tek küçük harfli bir ada sahiptir. Ardından kabuk, deseni eşleşen dosya adları listesine genişletir ve
tr
üç veya daha fazla bağımsız değişken görür: -d
ve dosya adları. Yana tr
tek argüman sonra beklentiden -d
, şikayet edecektir.
Ne yapmalıydın
Bir komutun argümanında özel karakterler varsa, bunlardan kaçmalısınız. Argümanı tek tırnak içine alın '…'
(bu en basit yoldur, başkaları da vardır). Tek tırnak içinde, tek tırnak dışında tüm karakterler kendini gösterir. Argümanın içinde tek bir alıntı varsa, onu değiştirin'\''
.
tr -d '[a-z]'
Ancak bunun muhtemelen ne demek istediğinizi olmadığını unutmayın! Bu, tr
küçük harfleri ve köşeli parantezleri silmeyi söyler . Bu eşdeğerdir tr -d ']a-z['
, tr '[]a-z'
küçük harfleri silmek için, vb kullanımı
tr -d a-z
Argümanı tr
bir karakter kümesidir. Köşeli parantezleri, karakter kümesi olduğunu belirtmek için normal ifade veya joker karakter desenindeki bir karakter kümesinin etrafına koyarsınız. Ancak tr
her seferinde tek bir karakter üzerinde çalışır. Komut satırı argümanları parantez içine koyduğunuz şeydir .
Karakter sınıflarını belirtmek için köşeli parantezlere ihtiyacınız vardır . Normal bir ifadede, bir karakter sınıfını belirtmek için köşeli parantez içindeki köşeli parantezleri kullanırsınız, örneğin [[:lower:]]*
herhangi bir sayıda küçük harfle [[:lower:]_]*
eşleşir, herhangi bir sayıda küçük harfle ve alt çizgiyle eşleşir. Bağımsız değişkeninde tr
, küme çevresindeki köşeli parantez olmadan gerekir, bu nedenle tr -d '[:lower:]'
küçük harfleri tr -d '[:lower:]_'
siler, küçük harfleri ve alt çizgileri siler.
Local Bazı yerlerde diğer karakterlerle eşleşebilir .
tr
aralıklar ek olmadan yazılmıştır[...]
. Yanitr -d '[a-z]'
öldüreceka-z
ve aynı zamanda karakterlerini[
ve]
.tr -d a-z
Sadece harfleri öldürmek için kullanına-z
.