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 echo
aslında görür Hello\\n
. Geçtiğiniz -e
için echo
, ters eğik çizgi kaçışlarını özel olarak ele alır ve \\
teke doğru daraltılır \
. Final n
kaç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 \n
kalır \n
.
Etkisi, çift tırnak içinde, \\\n
olarak yorumlanır \\n
.
echo -e
Görüldüğü zaman \\n
, birincisi \
ikinciden özel bir anlam çıkarır, bu yüzden bu metin için kelimenin tam anlamıyla echo
basar \n
.
Amacınız Hello
fazladan 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 printf
yerine echo
bu 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 -e
dönüştürür \\
için \
ve \n
bir 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ü \\n
içine dönüşler \n
nedeniyle bir ters eğik çizgi başka kaçan. Çift alıntı korur çünkü aynı zamanda, beş ile yapabilirsiniz \n
zaman \
kaçmaz.
Bu, tekli fiyatlandırmanın faydasını gösterir: sadece echo -e
tekli tırnak ( echo -e 'Hello\\\n'
) içine görmek istediğiniz şeyi koyun . printf
burada da iyidir. Bir seçenek var printf 'Hello\\\n\n'
. Ancak, printf
gerç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
.