Bagaimana cara mencetak karakter baris baru dengan gema?

15

Saya membuang string dengan hexdumpseperti ini 2031 3334 2e30 0a32 2032 3331 302e 000a. Jelas bahwa itu 0x0aadalah karakter baris baru, namun, ketika saya mencoba untuk menggemakan string ini, saya selalu dapat 1 430.2 2 13.0- baris baru diganti dengan spasi, bahkan saya menggunakan -ebendera.

Apa masalahnya? Apakah tailing \0merusak output? Apakah ada alternatif untuk mencetak 0x0abaris baru?

Terima kasih dan salam hangat.

Summer_More_More_Tea
sumber
ketika saya mencoba untuk menggemakan string ini Bagaimana Anda melakukannya? Apa perintah tepat yang Anda gunakan?
Dennis
@Dennis Maksudku echo -e. Terima kasih, saya menemukan solusinya.
Summer_More_More_Tea
1
solusi yang lebih disukai adalah hanya menggunakan printf "...\n"alih-alih echo.
Michael
stackoverflow.com/questions/8467424/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Jawaban:

26

Karakter baris baru dengan echoperintah adalah "\ n". Ambil contoh berikut:

echo -e "This is line 1\nThis is line 2"

Akan menghasilkan output

This is line 1
This is line 2

"-E" parameter adalah penting di sini.

Izzy
sumber
3
btw, ini "echo -e ..."bergantung pada gema bash untuk bekerja dengan benar (misalnya, dashhanya akan mencetak "-e"); tetapi '/ bin / echo' mungkin (atau mungkin tidak) juga berfungsi. Sayangnya (mungkin dengan tepat), ada banyak gema di sekitar, dan Anda tidak benar-benar ingin peduli yang mana yang akan Anda dapatkan. Menggunakan 'printf "....\n"adalah pilihan yang lebih portabel di seluruh env dan shell.
Michael
@michael_n yang merupakan OP akhirnya dikembalikan juga , sebenarnya. Tapi pertanyaannya secara eksplisit menyatakan "dengan gema" - maka jawaban saya seperti ini. Bagaimanapun, itu bukan "dengan Bash" - jadi terima kasih telah menunjukkan perbedaannya!
Izzy
4

POSIX 7 mengatakan Anda tidak bisa

http://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html

-e tidak didefinisikan dan backslash adalah implementasi didefinisikan:

Jika operan pertama adalah -n, atau jika salah satu operan berisi karakter <backslash>, hasilnya ditentukan-implementasi.

kecuali Anda memiliki ekstensi XSI opsional.

Jadi gunakan printfsaja:

format operan harus digunakan sebagai format string yang dijelaskan dalam Notasi Format File XBD [...]

yang File Format Notasi :

\ n <newline> Pindahkan posisi pencetakan ke awal baris berikutnya.

Perlu diingat juga bahwa Ubuntu 15.10 dan sebagian besar distro mengimplementasikan echokeduanya sebagai:

  • built-in Bash: help echo
  • executable mandiri: which echo

yang dapat menyebabkan beberapa kebingungan.

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
sumber
2

Saya akhirnya memformat string ini dengan benar printf "$string". Terima kasih semua.

Summer_More_More_Tea
sumber
Apa ini $stringyang kamu bicarakan? Bagaimana ini terhubung dengan pertanyaan? Apa yang tidak dilibatkan \nseperti dalam dua jawaban lainnya?
Peter Mortensen