![bash 中 printf 和 echo 的区别](https://linux22.com/image/48703/bash%20%E4%B8%AD%20printf%20%E5%92%8C%20echo%20%E7%9A%84%E5%8C%BA%E5%88%AB.png)
printf
bash中的函数和函数有什么区别echo
?
具体来说,运行:
echo "blah" >/dev/udp/localhost/8125
没有向监听 8125 的服务器发送“blah”命令,而
printf "blah" >/dev/udp/localhost/8125
发送了数据。 printf 是否在输出末尾发送额外的 EOF?
答案1
和echo
都是printf
内置命令(printf
Bash 自 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”。