Bagaimana cara mencetak "-n" tanpa mengeluarkan baris baru?


16

Saya mencoba mencetak -nmenggunakan echoperintah. Tetapi jika saya cukup mengetik echo -n, itu hanya mengeluarkan baris baru, tidak muncul -n, malah menerbitkan baris baru.


Apakah echo -n -- -nberfungsi (tidak memiliki kotak linux yang mudah untuk diuji)?
n0rd

Saya menginstal Ubuntu di mesin virtual dan tampaknya sangat lambat, tunggu.
Bintang OS

1
Saya sudah memeriksa - tidak. Mungkin karena itu perintah bash internal dan tidak menggunakan getopt(???) untuk mengurai baris perintah
n0rd

1
Pertanyaan ini ditanyakan dan dijawab di pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html - - " Menyelaraskan aplikasi yang ... mungkin mengharapkan gaung a -n, harus menggunakan utilitas printf yang berasal dari Kesembilan Sistem edisi "
Brandin

Pertanyaan populer pertama yang saya buat. Yay?
Bintang OS

Jawaban:


28

Masalahnya adalah bahwa echomenafsirkan -nsebagai argumen. Pada implementasi default bash, itu berarti (dari help echo):

  -n  do not append a newline

Ada berbagai cara untuk menyiasatinya:

  1. Buat menjadi sesuatu yang bukan pilihan dengan memasukkan karakter lain. Sebagai contoh, katakan echountuk tidak mencetak baris baru -n, kemudian kirim untuk mengartikan backslash lolos dengan -edan tambahkan baris baru secara eksplisit.

    $ echo -ne '-n\n'
    -n
  2. Atau, cukup masukkan spasi

    $ echo " -n"
     -n

    Namun, itu menambah ruang yang mungkin tidak Anda inginkan.

  3. Gunakan karakter non-cetak sebelum itu. Sini. Saya menggunakan backspace ( \b)

    $ echo -e "\b-n"
    -n

    Ini juga menambahkan karakter tambahan yang mungkin tidak Anda inginkan.

  4. Gunakan tipu daya

    $ echo n- | rev
    -n

    The revperintah hanya mencetak output terbalik.

  5. Gunakan alat yang tepat untuk pekerjaan itu

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

Anda benar bahwa karakter apa pun yang valid akan dilakukan.
Pilot6

@ Pilot6 ya tapi masalah dengan pendekatan itu (milik Anda dan milik saya) adalah itu menambah karakter tambahan. Itu dapat menyebabkan masalah di telepon. Apalagi jika Anda ingin menguraikannya dan mencoba sesuatu seperti grep '^-n'. pritnfadalah cara untuk pergi, sungguh.
terdon

Yah, printfmemang lebih baik, tetapi pertanyaannya adalah tentang adil echo.
Pilot6

2
Sepertinya echo -e "-n\c"melakukan hal yang tepat.
Pilot6

1
\cditekan output lebih lanjut
Pilot6


7

Anda dapat menggunakan perintah ini, tetapi itu menambah ruang ekstra.

echo -e  "\r-n"

Ini semacam peretasan.

-e mengaktifkan simbol perintah backslash.

\r adalah carriage return.

Sebenarnya setiap \karakter yang valid akan dilakukan di sembarang string.

Anda dapat melihat yang valid oleh help echo.

echo "-n"tidak berfungsi karena -ndigunakan sebagai parameter untuk echo.

PS Solusi IMHO terbaik adalah

echo -e "-n\c"

Itu tidak menambahkan karakter tambahan .

echo -e "-n\n"

mencetak sama tetapi dengan char baris baru.


1
Wov! Ini lebih baik dari milikku; dapatkah Anda menjelaskan sedikit untuk "pemula" ;-)
Sadi

Terima kasih, saya juga memperhatikan bahwa tidak masalah di mana Anda menambahkan carriage return, di awal atau di akhir.
Sadi

@Sadi ya, itu karena menambahkan apa pun menjadikannya opsi yang tidak valid. -nvalid, -nfootidak demikian yang akan dicetak.
terdon

@terdon man echomemilikinya juga. Tetapi helpsedikit lebih baik.
Pilot6

Saya tahu ia memilikinya, hanya saja tidak relevan. /bin/echoadalah hal yang sama sekali berbeda dan ketika Anda menjalankan echodi bash, Anda mendapatkan builtin yang bisa sangat berbeda tergantung pada shell Anda.
terdon

5

Saya pikir jika Anda hanya ingin menggunakan echo, ini harus memuaskan Anda:

echo "-n "

Ini berfungsi karena sementara -nadalah opsi yang valid untuk echo, -ndengan spasi setelahnya tidak. Karena ini bukan opsi, echocetak saja.


Sebagian besar pemirsa di sini mungkin hanya ingin "-n", bukan "-n".
Bintang OS

5

Kalian benar-benar terlalu memikirkannya.

 echo -e \\055n

Atau tanpa baris baru

 echo -en \\055n

Bagaimana berpikiran printf "-n\n" berlebihan?
Dmitry Grigoryev

Yup, saya baru saja menjawab seperti ini. Akan menghapus jawaban saya. Ini relatif portabel karena bekerja dengan gema /bin/echoecho -e "\055n"
bawaan

-en bukan yang saya inginkan.
Bintang OS

2

Untuk memperluas jawaban AB, satu-satunya cara portabel untuk digunakan echoadalah tidak menggunakan opsi apa pun seperti -n. Pertimbangkan penggunaannya printfjika tersedia. Halaman referensi ini memberikan lebih banyak detail dan menjelaskan dengan sangat baik kapan dan bagaimana echodan printfharus digunakan:

Saat ini, gema (1) hanya portabel jika Anda menghilangkan tanda dan menghindari urutan. Gunakan printf (1) sebagai gantinya, jika Anda membutuhkan lebih dari teks biasa.


Saya sudah Anda akan memperpanjang jawaban, silakan edit jawabannya.
Bintang OS

Saya tidak yakin itu ide yang baik untuk mengubah jawaban orang lain ke titik ketika itu akan memiliki lebih banyak teks dari saya daripada dari penulis asli.
Dmitry Grigoryev

2

Di skrip Bash Anda dapat menjalankan:

echo -n -
echo n

Atau dalam cangkang interacive:

echo -n - ; echo n

Ini echoadalah -karakter dan nkarakter.


Apakah kamu sudah mencobanya? Ini salah.
Pilot6


Output perintah pertama -pilot6@Pilot6:~$. Keluaran kedua n.
Pilot6

@ Pilot6 Tergantung pada apakah Anda menjalankannya di terminal interaktif atau dalam skrip bash, yang tidak ditentukan dalam pertanyaan. OTOH jika Anda membutuhkannya di terminal, cukup sederhana untuk hanya menggabungkan dua baris dengan &&- Saya tidak akan mengatakan jawaban ini salah .
user12205

Saya akan mengeditnya sehingga menjadi lebih jelas untuk skrip bash.
Bintang OS

1

Tiga cara lain:

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

0

Anda bisa lari

printf -n;echo

Diuji dalam Busybox Ash


Abu? Abu? POKEMON yang saya maksud, apa?
Bintang OS

Saya menjalankan 'busybox ash'
jiwopene

Ucapkan "Busybox" atau "Busybox Ash". Bukan hanya "Ash" karena orang mungkin berpikir tentang karakter pokemon atau abu dari gunung berapi.
Bintang OS

Lebih baik. alt255alt255
OS Bintang

@ StarOS ashadalah nama Shell Almquist.
muru
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.