Ters eğik çizgiler özel olarak işlenir echo -e, ancak önce kabuğun alıntı kurallarına göre , bazen özel olarak kabuk (bu durumda olan bash) ile işlenir .
Argüman echoaslında görür Hello\\n. Geçtiğiniz -eiçin echo, ters eğik çizgi kaçışlarını özel olarak ele alır ve \\teke doğru daraltılır \. Final nkaçamadı, bu yüzden tam anlamıyla görünüyor.
Bunun nedeni echo, kabuğun kendi işleminden\ önce ve ayrı olarak , kabuğun bazı bağlamlarda özel olarak işlem görmesidir, ancak diğerleri değildir. Tırnaksız \karakterler her zaman özel olarak işlenir, tek tırnak \ asla özel işlem yapılmaz, ancak koştuğunuz komuttaki gibi çift tırnaklı \ karakterlerin işlenmesi daha ince ve karmaşıktır.
Kabuk bir komutta çift tırnaklı metinle karşılaştığında, olduğu gibi "Hello\\\n", aksi halde değil,\ çift tırnak işaretleri içinde özel bir anlamı olabilecek bir karakterden önce gelen bir kaçış karakteri gibi davranır .
- Çünkü
\bazen özel bir anlam içini vardır "", bir \hemen başka öncesinde \bu ikinci alıntı etkisine sahiptir \. Böylece çift tırnak içinde, ilk \\içine çöktü \.
- Bu ilk iki
\karakterden sonra , ilk iki karakterden \etkilenmeyen ve bir karakterden önce gelen üçüncü bir karakter vardır n. Ancak n, çift tırnak işaretleri içinde özel olarak işlenen bir karakter değildir, bu yüzden \bu durumda özel olarak işlenmeden önce. Böylece \nkalır \n.
Etkisi, çift tırnak içinde, \\\nolarak yorumlanır \\n.
echo -eGörüldüğü zaman \\n, birincisi \ikinciden özel bir anlam çıkarır, bu yüzden bu metin için kelimenin tam anlamıyla echobasar \n.
Amacınız Hellofazladan bir yeni satırla yazdırmak , ancak ters eğik çizgi içermemekse (soru aslında bu konuda belirsizdi, artı yararlı bir örnek olduğunu düşünüyorum), o zaman bir çözüm a'yı kaldırmaktır \. echo -e "Hello\\n"Çıkışları Hello, sonunda yeni bir satırsonuyla çalıştırın .
Tek tırnak kullanmak ve yazmak daha iyi bir çözümdür echo -e 'Hello\n'. Tek tırnak, en güçlü alıntı şeklidir. Çok daha iyi bir çözüm kullanımına genellikle printfyerine echobu durumda olurdu printf 'Hello\n\n'.
Amacınız Hello\ters eğik çizgiyi ve ardından fazladan bir yeni satırı izlemektir. O zaman çift alıntı yaklaşımı mümkündür ancak hantaldır. :, İş geriye doğru anlamaya echo -edönüştürür \\için \ve \nbir satır için, ve çift alıntı dönüştürür \\için \altı ters eğik (ile yapabilirsiniz böylece echo -e "Hello\\\\\\n") çünkü \\niçine dönüşler \nnedeniyle bir ters eğik çizgi başka kaçan. Çift alıntı korur çünkü aynı zamanda, beş ile yapabilirsiniz \nzaman \kaçmaz.
Bu, tekli fiyatlandırmanın faydasını gösterir: sadece echo -etekli tırnak ( echo -e 'Hello\\\n') içine görmek istediğiniz şeyi koyun . printfburada da iyidir. Bir seçenek var printf 'Hello\\\n\n'. Ancak, printfgerçekten parladığı yer, ek argümanlar ekleyebilmenizdir. Bunun yerine printf '%s\n\n' 'Hello\'ikinci argümanı ekleyen kullanabilirsiniz (kelimenin tam anlamıyla Hello\çünkü tek tırnaklar hiçbir şeyi değiştirmez) %s.