在Bash中将数据作为字节发送到管道

3

最近我花了一些时间尝试使用bash将数字以字节形式写入管道(例如将10表示为0xA,而不是0x310x30)。不幸的是,我无法实现这样做,不得不将脚本改写成Python。在bash脚本中有没有办法将数据发送为字节而不是字符?


1
你可能会对我在这个SO答案中找到的纯Bash实现的hexdump感兴趣,它作为Bash 4.2的示例脚本分发。 - Dennis Williamson
如何在Bash中将一个小于1<<32的无符号十进制转换为4个字节(二进制)? - jfs
2个回答

2
正如chepner所说,您可以将任何值输出为例如:$'\012'。因此,一个简短的脚本:
convert() {
    printf \\$(printf '%03o' $1)
}
convert 122 | od -bc

正确的打印方式将把十进制参数转换为八进制数,第二个打印语句将按照上述方式打印八进制数...例如,十进制65将被转换为字节'A'。


2
你可以使用$'...'语法在bash中指定任意字符。其中$'\012'$'\x0a'分别代表十进制值为10的八进制和十六进制字节。请参阅bash手册中有关引用的部分。

如果我想发送一些我已经存在于testVar变量中的内容怎么办?我尝试使用$'...'语法,但没有成功。 - Adam Sznajder
1
然后就由变量的读取者来将该值视为一系列字节而不是可打印字符的序列。你不需要做任何特殊处理。 - chepner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接