Bash中printf和echo之间的区别

5
$ printf 'apple' | wc -m
       5
$ echo 'apple' | wc -m
       6

为什么printf输出5个字符,而echo输出6个字符?

1
请参考此处的更多细节:http://unix.stackexchange.com/questions/65803/why-is-printf-better-than-echo - zangw
尝试运行 echo -n 'apple' | wc -m - Sumit
更多细节可以在bash的手册页面中找到。 - Peter - Reinstate Monica
@ritesht93的回答很好:通常来说,实际上查看一个人想知道的输出是有帮助的。 - Peter - Reinstate Monica
2个回答

13

echo命令的man页面的第一句话(我加粗了):

输出由空格分隔的参数,后跟一个换行符

printf的man页面的第一句话:

在格式控制下将格式化的参数写入标准输出。

printf仅打印出在格式中出现的内容,它不会附加隐含的换行符。

在处理foo的内容时,echo "foo"printf "foo"可能有其他不同之处。 POSIX规范允许实现者自由选择如何实现echo,这样可能避免从众多历史实现中选择标准实现。在您需要精确控制输出时,请使用printf


虽然“echo”手册在某种程度上与bash内置命令相关,因为该内置命令肯定经过精心设计以完美模拟程序的行为,但手册记录的/bin/echo在OP的示例中从未执行。 - Peter - Reinstate Monica
我指的是bash手册中的echo条目,但它确实有歧义。我会澄清的。 - chepner

4

以下是它们之间的区别:

$printf 'abcd'
abcd$ echo 'abcd'
abcd
$

您可以看到,额外的字符是换行符\n


1
这才是完美的答案:手册,谁在乎手册 -- 它可能过时、不准确或者像chepner的情况一样不适用。重要的是发生了什么。 - Peter - Reinstate Monica

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接