bash 中 printf 和 echo 的区别

bash 中 printf 和 echo 的区别

printfbash中的函数和函数有什么区别echo

具体来说,运行:

echo "blah" >/dev/udp/localhost/8125

没有向监听 8125 的服务器发送“blah”命令,而

printf "blah" >/dev/udp/localhost/8125

发送了数据。 printf 是否在输出末尾发送额外的 EOF?

答案1

echo都是printf内置命令(printfBash 自 v2.0.2, 1998 起内置)。echo始终以 0 状态退出,并简单地在标准输出上打印参数,后跟行结束符,同时printf允许定义格式化字符串并在失败时给出非零退出状态代码。

printf对输出格式有更多的控制。它可用于指定项目使用的字段宽度,以及数字的各种格式选择(例如使用什么输出基数、是否打印指数、是否打印符号以及之后打印多少位数字)。小数点)。这是通过提供格式字符串来完成的,该格式字符串控制如何以及在何处打印其他参数,并且具有与 C 语言相同的语法(%03d%e%+d、...)。这意味着在不讨论格式 ( ) 时必须转义百分号%%

echo也许,如果您添加默认使用的换行符(使用-n选项时除外),您将获得相同的效果。

printf "blah\n" >/dev/udp/localhost/8125

关于性能,我一直认为这echo比后者更快,printf因为后者必须读取字符串并格式化它。但用time(也是内置的)测试它们,结果却表明不然:

$ time for i in {1..999999}; do echo "$i" >/dev/null; done
real    0m10.191s
user    0m4.940s
sys 0m1.710s

$ time for i in {1..999999}; do printf "$i" >/dev/null; done
real    0m9.073s
user    0m4.690s
sys 0m1.310s

告诉printf添加换行符,就像echo默认情况下一样:

$ time for i in {1..999999}; do printf "$i\n" >/dev/null; done
real    0m8.940s
user    0m4.230s
sys 0m1.460s

这显然比不打印 慢\n,但比 快echo

答案2

不同之处在于它echo在输出末尾发送换行符。没有办法“发送”EOF。

答案3

这可能是 echo 与 printf 的最佳描述

http://www.in-ulm.de/~mascheck/various/echo+printf/

在非常高的水平上.. printf 就像 echo 但可以完成更多格式化。

答案4

如果您想按字面意思打印字符串“-e”,则使用 echo 会遇到困难。最近在写脚本的时候遇到了这样的问题。

我必须使用 prinf 才能打印文字字符串“-e”。

相关内容