Mengapa "wc -c" mencetak nilai satu lagi dengan gema?

13

Saat berlari

echo abcd | wc -c

ia kembali 5.
Tapi kata abcditu hanya 4 karakter.

Apakah echomencetak karakter khusus setelah kata abcd?

Dan bisakah saya mencegah echomencetak itu?

pengguna78050
sumber
1
Perlu diketahui bahwa wc -ctidak memberi tahu Anda berapa banyak karakter sesuatu; itu hanya memberitahu berapa banyak byte itu.
tchrist

Jawaban:

21

echocetak baris baru ( \n) di akhir baris

echo abcd | xxd
0000000: 6162 6364 0a          abcd.

Dengan beberapa echoimplementasi, Anda dapat menggunakan -n:

-n jangan output baris baru yang tertinggal

dan uji:

echo -n abcd | wc -c
4

Dengan beberapa yang lain, Anda perlu \curutan pelarian:

\c: Menekan <newline>yang sebaliknya mengikuti argumen terakhir di output. Semua karakter yang mengikuti '\c'argumen akan diabaikan.

echo -e 'abcd\c' | wc -c
4

Portable, gunakan printf:

printf %s abcd | wc -c
4

(perhatikan bahwa wc -cjumlah byte, bukan karakter (meskipun dalam kasus abcdmereka umumnya setara). Gunakan wc -muntuk menghitung karakter).

بارپابابا
sumber
Perhatikan bahwa intinya adalah bahwa dengan beberapa echoimplementasi (semua yang memenuhi Unix setidaknya), itu adalah echo 'abcd\c'output abcdsaja. echo -e 'abcd\c'dalam echoimplementasi Unix-compliant akan menghasilkan -e abcd.
Stéphane Chazelas
5

Jika Anda menjalankan echotanpa -nopsi, itu menulis karakter baris baru setelah argumen. Jika tidak, jika Anda mengetik echo foo, prompt shell Anda berikutnya akan muncul di sebelah kanan foo. Begitu  wcjuga menghitung baris baru.

Bagaimana saya mencegah echopencetakan itu?

echo -n abcd | wc -c
G-Man Mengatakan 'Reinstate Monica'
sumber
2

Secara default, echoakan mencetak karakter baris baru ( \n) setelah string (itulah sebabnya Anda melihat prompt shell pada baris berikutnya alih-alih baris yang sama di mana abcddicetak.)

Anda dapat mencoba menambahkan -nparameter echountuk menonaktifkan karakter baris baru yang tertinggal.

echo -n abcd | wc -c
4
Chirag Bhatia - chirag64
sumber