将 dd skip|seek 偏移量作为十六进制传递

ead*_*ter 14 dd hex

# dd if=2013-Aug-uptime.csv bs=1 count=1 skip=3 2> /dev/null
d
# dd if=2013-Aug-uptime.csv bs=1 count=1 skip=0x3 2> /dev/null
f
Run Code Online (Sandbox Code Playgroud)

为什么第二个命令输出不同的值?

是否可以将 skip|seek 偏移量dd作为十六进制值传递?

ric*_*ici 23

为什么第二个命令输出不同的值?

由于历史原因,dd被认为x是乘法运算符。所以0x3被评估为0。

是否可以将 skip|seek 偏移量作为十六进制值传递给 dd?

据我所知,不是直接的。除了使用 operator 进行乘法之外x,您还可以为任何数字添加后缀b以表示“乘以 512”(0x200)和K表示“乘以 1024”(0x400)。与GNU DD也可以使用后缀MGTPEZY对乘以2的意思是20的分别的功率,30%,40%,50,60,70,80或90,并且可以上使用或小写除为b后缀。(还有许多其他可能的后缀。例如,EB表示“乘以 10 18 ”和PiB表示“乘以 2 50 ”。info coreutils "block size"如果您安装了 GNU,请参阅了解更多信息。)

您可能会发现上述内容晦涩、不合时宜且令人讨厌到荒谬的地步。不用担心:您并不孤单。幸运的是,您可以将其全部忽略并改用 shell 的算术替换(bash 和其他符合 Posix 的 shell 以及一些非 Posix shell 都可以使用)。shell 确实理解十六进制数,并且它允许以正常方式编写的全范围算术运算符。您只需要用以下内容包围表达式$((...))

# dd if=2013-Aug-uptime.csv bs=1 count=$((0x2B * 1024)) skip=$((0x37))
Run Code Online (Sandbox Code Playgroud)