Komutu -n
kullanarak yazdırmaya çalışıyorum echo
. Ama basitçe echo -n
yazarsam, sadece bir satırsonu düzenler, görünmez -n
, bunun yerine satırsonu düzenler.
getopt
komut satırını ayrıştırmak için (???) kullanmıyor
Komutu -n
kullanarak yazdırmaya çalışıyorum echo
. Ama basitçe echo -n
yazarsam, sadece bir satırsonu düzenler, görünmez -n
, bunun yerine satırsonu düzenler.
getopt
komut satırını ayrıştırmak için (???) kullanmıyor
Yanıtlar:
Sorun şu ki , bir argüman olarak echo
yorumlamaktadı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, echo
bir satırsonu yazdırmamayı -n
, sonra ters eğik çizgi kaçışlarını yorumlamasını -e
ve satırsonu satırını açıkça eklemesini söyleyin .
$ echo -ne '-n\n'
-n
Alternatif 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
rev
Komut basitçe çıkış ters yazdırır.
İş için doğru aracı kullanın
$ printf -- '-n\n'
-n
grep '^-n'
. pritnf
gerçekten de yol.
printf
daha iyi, ama soru sadece ilgili echo
.
echo -e "-n\c"
kesin olan şey.
\c
daha fazla çıktı bastırmak
Bazen doğru aleti kullanmak iyi bir fikirdir. Bunun printf
yerine ş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"
-n
iç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.
-n
geçerli, -nfoo
yazdırılamayacak şekilde değil.
man echo
da var. Ama help
biraz daha iyi.
/bin/echo
tamamen farklı bir şeydir ve echo
bash'da koştuğunuzda , kabuğunuza bağlı olarak oldukça farklı olabilecek yerleşimi alırsınız.
Kesinlikle echo
sadece kullanmak istiyorsanız , bu sizi tatmin etmelidir:
echo "-n "
Süre Bunun nedeni çalışır -n
için geçerli bir seçenektir echo
, -n
değil mi arkasına boşluk. Bir seçenek olmadığından, echo
sadece 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/echo
en 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 echo
gibi seçenekleri kullanmaktan kaçınmaktır -n
. Mümkünse printf
bunun yerine kullanmayı düşünün . Bu referans sayfası daha fazla ayrıntı sağlar ve ne zaman ve nasıl echo
ve printf
ne 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 echo
bir -
karakter ve bir n
karakter.
-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)?