跑步时
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 提示符将出现在 的右侧foo
。wc
计算换行符也是如此 。
我怎样才能防止
echo
打印它?
echo -n abcd | wc -c
答案3
默认情况下,echo
会打印一个换行符( \n
) 位于字符串之后(这就是为什么您会在下一行看到 shell 提示符,而不是在abcd
打印的同一行。)
您可以尝试添加一个-n
参数来echo
禁用尾随换行符。
echo -n abcd | wc -c
4