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


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


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

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