为什么“wc -c”会在 echo 中再打印一个值 1?

为什么“wc -c”会在 echo 中再打印一个值 1?

跑步时

echo abcd | wc -c

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

是否echo在单词后打印一些特殊字符abcd

我可以阻止echo打印它吗?

答案1

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计算字符数)。

答案2

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

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

echo -n abcd | wc -c

答案3

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

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

echo -n abcd | wc -c
4

相关内容