Tại sao, wc wc -cvà in một giá trị thêm một lần nữa với tiếng vang?


13

Khi chạy

echo abcd | wc -c

nó sẽ trả về 5.
Nhưng từ abcdnày chỉ dài 4 ký tự.

echoin một số ký tự đặc biệt sau từ abcd?

Và tôi có thể ngăn chặn việc echoin đó không?



1
Xin lưu ý rằng điều wc -cđó không cho bạn biết có bao nhiêu nhân vật; nó chỉ cho biết có bao nhiêu byte.
tchrist

Câu trả lời:


21

echoin dòng mới ( \n) ở cuối dòng

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

Với một số echotriển khai, bạn có thể sử dụng -n:

-n không xuất ra dòng mới

và kiểm tra:

echo -n abcd | wc -c
4

Với một số người khác, bạn cần \ctrình tự thoát:

\c: Bỏ qua <newline>cái khác theo sau đối số cuối cùng trong đầu ra. Tất cả các ký tự theo sau '\c'trong các đối số sẽ được bỏ qua.

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

Có thể sử dụng printf:

printf %s abcd | wc -c
4

(lưu ý rằng wc -cđếm byte, không phải ký tự (mặc dù trong trường hợp abcdchúng thường tương đương). Sử dụng wc -mđể đếm ký tự).


Lưu ý rằng vấn đề là với một số echotriển khai (ít nhất là tất cả các triển khai tuân thủ Unix), đó là echo 'abcd\c'kết quả đầu ra abcdmột mình. echo -e 'abcd\c'trong echotriển khai tuân thủ Unix sẽ xuất ra -e abcd.
Stéphane Chazelas

5

Nếu bạn chạy echomà không có-n tùy chọn, nó sẽ viết một ký tự dòng mới sau các đối số. Mặt khác, nếu bạn gõ echo foo, dấu nhắc shell tiếp theo của bạn sẽ xuất hiện ở bên phải của foo. Vậy  wclà đếm dòng mới.

Làm thế nào tôi có thể ngăn chặn việc echoin đó?

echo -n abcd | wc -c

2

Theo mặc định, echosẽ in một ký tự dòng mới (\n ) sau chuỗi (đó là lý do tại sao bạn thấy dấu nhắc shell trên dòng tiếp theo thay vì cùng dòng abcdđược in.)

Bạn có thể thử thêm một -ntham số echođể vô hiệu hóa ký tự dòng mới.

echo -n abcd | wc -c
4
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.