Bash中printf和echo之间的区别

时间:2016-02-24 13:18:01

标签: linux bash

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

为什么printf打印5并且echo打印6个字符?

4 个答案:

答案 0 :(得分:5)

echo手册页中的bash条目的第一句话(强调我的):

  

输出args,用空格分隔,后跟换行符

printf的手册页条目的第一句:

  

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

printf仅打印格式中显示的内容;它不附加隐含的换行符。

echo "foo"printf "foo"之间可能存在其他差异,具体取决于foo究竟是什么。 POSIX规范为实现echo的实现提供了广泛的自由裁量权,可能是为了避免从不同的历史实现中选择作为标准。当您依赖精确输出时,请使用printf

答案 1 :(得分:1)

这是差异..

char *lineptr[] = { "line1", "line2", "line3" };

正如您所看到的,其他字符是换行符lineptr

答案 2 :(得分:0)

Echo命令添加" \ n"字符串末尾的字符。 也就是说,当我们使用echo命令打印某些内容时,它会自动传递给新行。但是printf没有这样做。

echo" string"等于"字符串\ n"并打印"字符串"等于"字符串"

所以输出" wc -m"命令不同。

答案 3 :(得分:-2)

在执行命令后,Printf不给出新行,但在执行命令后,echo给出新的行。 请参阅下面的代码输出。

使用Printf:

!/ bin / sh

a = 0

同时[$ a -lt 10] 做    printf $ a    a = expr $a + 1 完成

o / p: 0123456789

使用Echo:

!/ bin / sh

a = 0

同时[$ a -lt 10] 做    回声$ a    a = expr $a + 1 完成

o / p:它将以列方式打印,因为此窗口不以列方式显示,请尝试执行此代码,这样可以更好地理解。

0 1个 2 3 4 5 6 7 8 9

您可以通过发出bewlow命令来删除echo中的新行 echo -n $ a