$ printf 'apple' | wc -m
5
$ echo 'apple' | wc -m
6
为什么printf打印5并且echo打印6个字符?
答案 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:
a = 0
同时[$ a -lt 10]
做
printf $ a
a = expr $a + 1
完成
o / p: 0123456789
使用Echo:
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