1

我对某些 bash 命令中发生的一些0a(即NLASCII 字节)感到困惑。关于以下内容:

$ echo | sha1sum $1 | awk '{print $1;}' | xxd -r -ps > test.bin
$ echo | sha1sum $1 | awk '{print $1;}' > test.hex
$ xxd test.bin
00000000: adc8 3b19 e793 491b 1c6e a0fd 8b46 cd9f  ..;...I..n...F..
00000010: 32e5 92fc                                2...
$ xxd test.hex
00000000: 6164 6338 3362 3139 6537 3933 3439 3162  adc83b19e793491b
00000010: 3163 3665 6130 6664 3862 3436 6364 3966  1c6ea0fd8b46cd9f
00000020: 3332 6535 3932 6663 0a                   32e592fc.

是什么导致0a字节存在test.hex但不存在test.bin

注1:这是我在使用那里使用的解决方案之后一直在问自己的一个问题:

将 ```sha``` 校验和输出以二进制格式而不是 bash 中的纯文本十六进制转储到磁盘

注 2:我能够抑制0a字节,这不是问题,我只是好奇为什么它在一种情况下存在,而在另一种情况下不存在:

$ echo | sha1sum $1 | awk '{print $1;}' | head -c-1 > test_2.hex
$ xxd test_2.hex
00000000: 6164 6338 3362 3139 6537 3933 3439 3162  adc83b19e793491b
00000010: 3163 3665 6130 6664 3862 3436 6364 3966  1c6ea0fd8b46cd9f
00000020: 3332 6535 3932 6663                      32e592fc
4

1 回答 1

2

您所0a看到的来自awk. 默认情况下,输出记录分隔符awk,您可以通过设置(例如使用 a )\n来远程它。ORSBEGIN {ORS=""}

xxd -r -ps由于-r参数,当您通过管道时会丢失它。来自手册页:“任何地方都允许使用额外的空格和换行符。”

于 2020-03-02T15:32:09.637 回答