Neden iki noktadan kaçmam gerekiyor?


13

Bence gibi özel bir karakter kaçabilir biliyoruz *(){}$ile \kabul değişmezleri olacak şekilde.
Örneğin \*veya\$

Ama .iki kez yapmam gerekiyorsa, \\.aksi takdirde özel karakter olarak kabul edilir. Misal:

man gcc | grep \\.

Neden böyle?


İki kez kaçmak zorunda olduğun vakayı verebilir misin?
cuonglm

man bash|grep \\.bir örnek olabilir.
Kayıtlı Kullanıcı

3
Daha doğrusu, iki kez noktadan kaçmazsınız, kaçış karakterinden kaçarsınız, böylece grep'e geçer
Cthulhu

5
Sen Ters eğik çizgi karakterleri kaçan önlemek için tırnak işareti kullanabilirsiniz: man gcc | grep '\.'.
Leonid Beschastny

1
Neler olduğunu ne kadar net olduğu için @ LeonidBeschastny'nin önerisini şiddetle tercih ediyorum
Izkata

Yanıtlar:


24

Genellikle, özel karakteri gerçek olarak kabul etmek için sadece bir kez kaçmanız gerekir. Bazen iki kez yapmak zorundasınız, çünkü deseniniz birden fazla program tarafından kullanılıyor.

Örneğinizi tartışalım:

man gcc | grep \\.

Bu komut iki program tarafından bashyorumlanır , yorumlayıcı ve grep. İlk kaçış nedenlerini bashbilir \gerçek, ikincisi pastır grep.

Eğer yalnızca bir kez kaçmaya ise \., bashbu nokta değişmez olduğunu biliyoruz ve geçecek .etmek grep. Bunu grepgörünce ., noktanın değişmez özel bir karakter olduğunu düşünüyor.

Eğer iki kere kaçmak ise bashdesen geçecek \.kadar grep. Şimdi grepbunun gerçek bir nokta olduğunu bilin.


: Peki, nokta için kaçış karakteri kullandığımız boru sayısına bağlı mı? Örneğin, cmd | cmd | cmd | cmd \\\\. Bu doğru mu????
Thushi

6
@Thushi: Hayır. Bunun, bir (veya birkaç) karakter kullanmış olmanızla bir ilgisi yoktur, ancak bunun için de geçerlidir grep \\. my_file. Komut satırı, \ ikinciden kaçmak için ilkini kullanarak kabuk tarafından yorumlanır , böylece biri \ tam anlamıyla grep'e geçirilir. Nokta .kabuk için özel değildir, bu yüzden yine de kelimesi kelimesine aktarılır. Grep daha sonra (single'ı) okur \ ve noktadan kaçmak için kullanır ..
Ansgar Esztermann

@AnsgarEsztermann: Evet, bu doğru. Kontrol etti. Teşekkürler :)
Thushi

2
"İlk kaçışın bash'ın bildiğine neden olduğunu, ikincisi grep için olduğunu" yazdığından cevabın biraz yanlış olduğuna inanıyorum. Aslında, ilk kaçış bash \ 'ın ölümcül olduğunu ve \. grep.
Cthulhu

@Gnouc Bence olduğunu sanmıyorum. echo .sadece bash ... bach .karakterini yansıtır .
Cthulhu
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.