为什么“ wc -c”通过echo会再输出一个值?


Answers:


21

echo\n在行尾打印换行符()

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

在某些echo实现中,您可以使用-n

-n 不输出尾随换行符

并测试:

echo -n abcd | wc -c
4

对于其他一些,您需要\c转义序列:

\c:抑制<newline>在输出中最后一个参数之后的。'\c'参数后面的所有字符都将被忽略。

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

可移植地使用printf

printf %s abcd | wc -c
4

(请注意,wc -c字节是计数字节,而不是字符(尽管abcd它们通常等效)。wc -m用于计数字符)。


请注意,关键在于某些echo实现(至少是所有Unix兼容的实现)仅echo 'abcd\c'是输出abcdecho -e 'abcd\c'在Unix兼容的echo实现中将输出-e abcd
斯特凡Chazelas

5

如果echo不带-n选项运行,它将在参数后写入换行符。否则,如果键入echo foo,则下一个shell提示将出现在的右侧foowc计数换行符也是如此  。

如何防止echo打印出来?

echo -n abcd | wc -c

2

默认情况下,echo将在字符串后打印换行符\n)(这就是为什么您在下一行而不是在abcd打印的同一行看到shell提示的原因。)

您可以尝试添加-n参数echo以禁用尾随换行符。

echo -n abcd | wc -c
4
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.