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.