Yeni satır vermeden “-n” nasıl yazdırılır?


16

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.


Çalışıyor mu echo -n -- -n(test etmek için kullanışlı herhangi bir linux kutunuz yok)?
n0rd

Ubuntu'yu sanal bir makineye yüklüyorum ve çok yavaş görünüyor, bekle.
Star OS

1
Kontrol ettim - değil. Muhtemelen dahili bash komutu olduğundan ve getoptkomut satırını ayrıştırmak için (???) kullanmıyor
n0rd

1
Bu soru sordu ve cevaplanır pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html - - "... belki yankı bir -n bekliyor olabileceğini uygulamaları Uyumlu, Dokuzu türetilen Printf programını kullanmalıdır Baskı sistemi "
Brandin

Yaptığım ilk popüler soru. Yaşasın?
Star OS

Yanıtlar:


28

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:

  1. 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'
    -n
  2. Alternatif olarak, sadece bir boşluk ekleyin

    $ echo " -n"
     -n

    Ancak bu, muhtemelen istemediğiniz bir alan ekler.

  3. 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.

  4. Hile yap

    $ echo n- | rev
    -n

    revKomut basitçe çıkış ters yazdırır.

  5. İş için doğru aracı kullanın

    $ printf -- '-n\n'
    -n

Geçerli herhangi bir karakterin yapacağı doğrudur.
Pilot6

@ Pilot6 evet ama bu yaklaşımla ilgili sorun (sizin ve benimki) fazladan bir karakter katması. Bu durum sorunlara neden olabilir. Özellikle de ayrıştırmak ve benzeri bir şey denemek istiyorsanız grep '^-n'. pritnfgerçekten de yol.
terdon

Her neyse, printfdaha iyi, ama soru sadece ilgili echo.
Pilot6

2
Görünüşe göre echo -e "-n\c"kesin olan şey.
Pilot6

1
\cdaha fazla çıktı bastırmak
Pilot6


7

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.


1
Wov! Bu benimkinden daha iyi; "yeni başlayanlar" için biraz açıklayabilir misiniz ;-)
Sadi

Teşekkürler, başlangıçta veya sonunda, satır başını nereye eklediğinizin önemli olmadığını da fark ettim.
Sadi

@Sadi evet, çünkü bir şey eklemek onu geçerli olmayan bir seçenek haline getiriyor. -ngeçerli, -nfooyazdırılamayacak şekilde değil.
terdon

@terdon man echoda var. Ama helpbiraz daha iyi.
Pilot6

Elinde olduğunu biliyorum, sadece alakalı değil. /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.
terdon

5

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.


Buradaki görüntüleyenlerin çoğu yalnızca "-n" isteyebilir, "-n" değil.
Star OS

5

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 ?
Dmitry Grigoryev

Evet, ben sadece bu şekilde cevap verdim. Cevabımı silecek. Bu, dahili yankı ile çalıştığı ve /bin/echoen azından şu şekilde çağrıldığında çalıştığı için nispeten taşınabilirecho -e "\055n"
abligh

-en istediğim şey değil.
Star OS

2

@ 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.


Bir cevabı uzatacağım, lütfen cevabı düzenleyin.
Star OS

Benden orijinal yazardan daha fazla metin olacak başka birinin cevabını değiştirmenin iyi bir fikir olduğundan emin değilim.
Dmitry Grigoryev

2

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.


Onu denedin mi? Bu yanlış.
Pilot6


İlk komut çıkışları -pilot6@Pilot6:~$. İkinci çıktı n.
Pilot6

@ Pilot6 Etkileşimli terminalde mi yoksa soruda belirtilmeyen bir bash betiğinde mi çalıştığınıza bağlıdır. OTOH terminalde ihtiyacınız varsa, sadece iki hattı birleştirmek kolaydır &&- Bu cevabın yanlış olduğunu söyleyemem .
user12205 23:15

Bir bash betiği için çok daha net hale gelecek şekilde düzenleyeceğim.
Star OS

1

Diğer üç yol:

$ echo -e '\x2dn' # ASCII hexadecimal value
-n
$ echo -e '\u002dn' # Unicode code point
-n
$ echo -e '\u2dn' # Unicode code point shortened
-n

0

Koşabilirsin

printf -n;echo

Busybox Külünde test edildi


Kül? Kül? POKEMON yani ne?
Star OS

Ben 'busybox ash' koştum
jiwopene

"Busybox" veya "Busybox Ash" deyin. Çünkü sadece "Kül" insanları pokemon karakterini ya da yanardağlardan gelen külleri düşünebilirler.
Star OS

Daha iyi. alt255alt255
Star OS

@StarOS ash, Almquist Kabuğunun adıdır.
muru
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.