为什么“wc -c”用回声打印一个多一的值?

use*_*050 14 echo text-processing wc

跑步时

echo abcd | wc -c
Run Code Online (Sandbox Code Playgroud)

它返回5
但是这个词abcd只有4个字符长。

echo打印的字经过一些特殊字符abcd

我可以阻止echo打印吗?

Bab*_*aba 24

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

echo abcd | xxd
0000000: 6162 6364 0a          abcd.
Run Code Online (Sandbox Code Playgroud)

对于某些echo实现,您可以使用-n

-n 不输出尾随换行符

并测试:

echo -n abcd | wc -c
4
Run Code Online (Sandbox Code Playgroud)

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

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

echo -e 'abcd\c' | wc -c
4
Run Code Online (Sandbox Code Playgroud)

便携地,使用printf

printf %s abcd | wc -c
4
Run Code Online (Sandbox Code Playgroud)

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


G-M*_*ca' 5

如果您在echo没有-n选项的情况下运行,它会在参数后写入一个换行符。否则,如果您键入echo foo,您的下一个 shell 提示将出现在foo. wc计算换行符也是如此 。

我怎样才能防止echo打印它?

echo -n abcd | wc -c
Run Code Online (Sandbox Code Playgroud)