我认为这些命令在 bash 中是等效的,但它们产生不同的输出。你能帮我理解为什么吗?
$ echo "SEBA" | wc
1 1 5
Run Code Online (Sandbox Code Playgroud)
$ wc <<< "SEBA"
1 1 5
Run Code Online (Sandbox Code Playgroud)
继续运行
这里有一些测试:
$ echo "SEBA" | wc | hexdump
0000000 2020 2020 2020 2031 2020 2020 2020 2031
0000010 2020 2020 2020 0a35
0000018
Run Code Online (Sandbox Code Playgroud)
$ wc <<< "SEBA" | hexdump
0000000 2031 2031 0a35
0000006
Run Code Online (Sandbox Code Playgroud)
$ echo "SEBA" | hexdump
0000000 4553 4142 000a
0000005
Run Code Online (Sandbox Code Playgroud)
$ hexdump <<< "SEBA"
0000000 4553 4142 000a
0000005
Run Code Online (Sandbox Code Playgroud)
当 GNUwc从文件中获取所有输入时,它使用stat()(或fstat()for stdin)来获取所有文件的大小(以字符为单位)。由此它可以确定每个输出字段所需的最大位数,并且只使用那么多位数。
当任何输入是管道时,不可能提前确定其大小。该输入默认为 7 位数字。
Here-strings 是通过将字符串复制到临时文件并将 stdin 重定向到该文件来实现的,因此这种情况下可以使用优化的字段大小。但是管道echo不允许这样做,所以它得到了 7 位数字的字段。
请参阅函数get_input_fstatus和compute_number_widthGNU coreutils 源代码。
| 归档时间: |
|
| 查看次数: |
59 次 |
| 最近记录: |