printfbash中的echo函数和函数有什么区别?
具体来说,运行:
echo "blah" >/dev/udp/localhost/8125
Run Code Online (Sandbox Code Playgroud)
没有将“blah”命令发送到侦听 8125 的服务器,而
printf "blah" >/dev/udp/localhost/8125
Run Code Online (Sandbox Code Playgroud)
发送了数据。printf 在输出结束时发送额外的 EOF 吗?
J. *_*bal 64
两个echo和printf是内置命令(printf是击内置自V2.0.2,1998年)。echo总是以 0 状态退出,并简单地在标准输出上打印参数后跟行尾字符,同时printf允许定义格式化字符串并在失败时给出非零退出状态代码。
printf对输出格式有更多的控制。它可用于指定项目使用的字段宽度,以及数字的各种格式选择(例如使用什么输出基数、是否打印指数、是否打印符号以及在后面打印多少位数字)小数点)。这是通过提供格式字符串来完成的,该字符串控制打印其他参数的方式和位置,并具有与 C 语言相同的语法(%03d, %e, %+d,...)。这意味着在不谈论格式 ( %%)时,您必须转义百分比符号。
可能,如果您添加echo默认使用的换行符(使用-n选项时除外),您将获得相同的效果。
printf "blah\n" >/dev/udp/localhost/8125
Run Code Online (Sandbox Code Playgroud)
关于性能,我一直认为这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
Run Code Online (Sandbox Code Playgroud)
告诉printf添加换行符,就像echo默认情况下一样:
$ time for i in {1..999999}; do printf "$i\n" >/dev/null; done
real 0m8.940s
user 0m4.230s
sys 0m1.460s
Run Code Online (Sandbox Code Playgroud)
这显然比不打印要慢\n,但比不打印要快echo。
Dav*_*rtz 28
不同之处在于echo在其输出的末尾发送一个换行符。没有办法“发送”EOF。
这可能是 echo 与 printf 的最佳描述
http://www.in-ulm.de/~mascheck/various/echo+printf/
在非常高的层次上.. printf 就像 echo 但可以完成更多的格式化。
echo打印其参数,后跟换行符。对于多个参数,它们之间用空格分隔。根据 unix 变体、shell 和 shell 选项,它还可能解释一些以 开头的转义序列\,并且如果第一个参数以 开头,它可能会将它们视为选项-。
printf将其第一个参数解释为格式,并将后续参数解释为%说明符的参数。除非您指定换行符,否则不会添加换行符。在第一个参数中,除两个字符外的所有字符均按字面解释:%启动 printf 说明符,并\启动转义序列(例如,\n对于换行符)。
因为不同的 shell 工作方式不同,echo "$string"并不总是打印指定的字符串加换行符。打印字符串的可靠方法是printf %s "$string"。如果您想在字符串后添加换行符,请编写printf '%s\n' "$string"。
在您的情况下,假设blah不以 a-或 contains %or开头\,两个命令之间的唯一区别是echo添加换行符和printf不添加换行符。
| 归档时间: |
|
| 查看次数: |
129094 次 |
| 最近记录: |