Komutu -nkullanarak yazdırmaya çalışıyorum echo. Ama basitçe echo -nyazarsam, sadece bir satırsonu düzenler, görünmez -n, bunun yerine satırsonu düzenler.
getoptkomut satırını ayrıştırmak için (???) kullanmıyor
Komutu -nkullanarak yazdırmaya çalışıyorum echo. Ama basitçe echo -nyazarsam, sadece bir satırsonu düzenler, görünmez -n, bunun yerine satırsonu düzenler.
getoptkomut satırını ayrıştırmak için (???) kullanmıyor
Yanıtlar:
Sorun şu ki , bir argüman olarak echoyorumlamaktadır -n. Varsayılan bash uygulamasında bu (from help echo) anlamına gelir :
-n do not append a newline
Bunu aşmanın çeşitli yolları vardır:
Başka bir karakter ekleyerek seçenek olmayan bir şeye dönüştürün. Örneğin, echobir satırsonu yazdırmamayı -n, sonra ters eğik çizgi kaçışlarını yorumlamasını -eve satırsonu satırını açıkça eklemesini söyleyin .
$ echo -ne '-n\n'
-nAlternatif olarak, sadece bir boşluk ekleyin
$ echo " -n"
-n
Ancak bu, muhtemelen istemediğiniz bir alan ekler.
Baskıdan önce olmayan bir karakter kullanın. Buraya. Backspace ( \b) kullanıyorum
$ echo -e "\b-n"
-n
Bu, muhtemelen istemediğiniz ekstra bir karakter ekler.
Hile yap
$ echo n- | rev
-n
revKomut basitçe çıkış ters yazdırır.
İş için doğru aracı kullanın
$ printf -- '-n\n'
-ngrep '^-n'. pritnfgerçekten de yol.
printfdaha iyi, ama soru sadece ilgili echo.
echo -e "-n\c"kesin olan şey.
\cdaha fazla çıktı bastırmak
Bazen doğru aleti kullanmak iyi bir fikirdir. Bunun printfyerine şunları kullanabilirsiniz :
% printf "-n\n"
-n
Bu komutu kullanabilirsiniz, ancak fazladan boşluk ekler.
echo -e "\r-n"
Bu bir tür hack.
-e ters eğik çizgi komut sembollerini etkinleştirir.
\r bir satır başı.
Aslında herhangi bir \geçerli karakter dizenin herhangi bir yerinde yapacaktır.
Hangilerinin geçerli olduğunu görebilirsiniz help echo.
echo "-n"-niçin bir parametre olarak kullanıldığı için çalışmıyor echo.
PS IMHO için en iyi çözüm
echo -e "-n\c"
Ekstra karakter eklemez .
echo -e "-n\n"
aynı yazdırır, ancak yeni bir çizgi karakteriyle yazdırır.
-ngeçerli, -nfooyazdırılamayacak şekilde değil.
man echoda var. Ama helpbiraz daha iyi.
/bin/echotamamen farklı bir şeydir ve echobash'da koştuğunuzda , kabuğunuza bağlı olarak oldukça farklı olabilecek yerleşimi alırsınız.
Kesinlikle echosadece kullanmak istiyorsanız , bu sizi tatmin etmelidir:
echo "-n "
Süre Bunun nedeni çalışır -niçin geçerli bir seçenektir echo, -ndeğil mi arkasına boşluk. Bir seçenek olmadığından, echosadece yazdırır.
Siz gerçekten düşünüyorsunuz.
echo -e \\055n
Veya sondaki yeni satır olmadan
echo -en \\055n
printf "-n\n" Aşırı düşünmek nasıl ?
/bin/echoen azından şu şekilde çağrıldığında çalıştığı için nispeten taşınabilirecho -e "\055n"
@ AB'nin cevabını genişletmek için, kullanmanın tek taşınabilir yolu echogibi seçenekleri kullanmaktan kaçınmaktır -n. Mümkünse printfbunun yerine kullanmayı düşünün . Bu referans sayfası daha fazla ayrıntı sağlar ve ne zaman ve nasıl echove printfne zaman kullanılması gerektiğini çok iyi açıklar :
Günümüzde, echo (1) yalnızca bayrakları atlar ve dizilerden kaçarsanız taşınabilir. Düz metinden daha fazlasına ihtiyacınız varsa printf (1) kullanın.
Bash betiğinde şunları çalıştırabilirsiniz:
echo -n -
echo n
Veya etkileşimli kabukta:
echo -n - ; echo n
Bu echobir -karakter ve bir nkarakter.
-pilot6@Pilot6:~$. İkinci çıktı n.
&&- Bu cevabın yanlış olduğunu söyleyemem .
Koşabilirsin
printf -n;echo
Busybox Külünde test edildi
ash, Almquist Kabuğunun adıdır.
echo -n -- -n(test etmek için kullanışlı herhangi bir linux kutunuz yok)?