哪个更好的printf或echo?
为了显示消息和打印数据,有两个命令可用printf
和echo
。
然后他们使用了多么不同? 哪个更优选?
优选和最广泛使用的是不一样的。 虽然printf
由于许多原因而更好,但大多数人仍然使用echo
因为语法更简单。
您更喜欢printf
主要原因是:
-
echo
不是标准化的,它在不同的系统上表现不同。 -
当你
echo foo
时,很难预测你实际运行的是什么。 为了说明,在我的Debian系统上:$ type -a echo echo is a shell builtin echo is /bin/echo
如您所见,有两个不同的
echo
命令,一个是shell(在本例中为bash)内置,另一个是单独的二进制。 请注意,bash
也有一个内置的printf
但它的行为更加标准化,所以它不是一个问题(感谢@RaduRădeanu指出它)。 -
由于
echo
某些(但不是全部)实现支持命令行开关,因此很难打印以-
开头的字符串。 虽然许多程序支持--
表示开关的结束和参数的开始(例如,grep -- -a file
将在file
中找到包含-a
),但echo
不支持。 那么,你怎么有echo
print-n
?$ echo -n ## no output $ echo '-n' ## no output $ echo "-n" ## no output $ echo \-n ## no output $ echo -e '\055n' ## using the ASCII code works but only on implementations -n ## that support -e
printf
可以很容易地做到这一点:$ printf -- '-n\n' -n $ printf '%s\n' -n -n $ printf '\055n\n' -n
有关为什么printf
优于echo
更多信息,请参阅http://unix.stackexchange.com上类似问题的答案:
要问哪个更好是本身不完整的。
如果所有人都希望发出由换行符终止的一行或多行文本,则回声就足够了。 如果有任何更聪明的意图,特别是包括没有换行符的“部分行”,则printf最适合此目的 。