在bash中将二进制数据作为参数传递

Cam*_*Cam 24 parameters bash character-encoding

我需要将二进制数据传递给接受命令行参数的bash程序.有没有办法做到这一点?

这是一个接受一个参数的程序:

script arg1
Run Code Online (Sandbox Code Playgroud)

但是arg1,我想传递一些不是很好的ASCII字符的字节0x02,而不是字符串,特别是字节0xc50xd8.

我该怎么做呢?

Kar*_*ath 23

script "`printf "\x02\xc5\xd8"`"
script "`echo -e "\x02\xc5\xd8"`"
Run Code Online (Sandbox Code Playgroud)

测试:

# echo -n "`echo -e "\x02\xc5\xd8"`" | hexdump -C
00000000  02 c5 d8                                          |...|
Run Code Online (Sandbox Code Playgroud)

  • 我相信你的测试相当于更简单的`echo -ne"\ x02\xc5\xd8"| hexdump -C` :-) (3认同)
  • 不完全......在这里我试图模拟`script`的实际调用,用`echo -n`替换它 (2认同)

l0b*_*0b0 21

使用$''报价样式:

script $'\x02\xc5\xd8'
Run Code Online (Sandbox Code Playgroud)

测试:

printf $'\x02\xc5\xd8' | hexdump -C
00000000  02 c5 d8
Run Code Online (Sandbox Code Playgroud)


jor*_*anm 5

Bash不擅长处理二进制数据.我建议使用base64对其进行编码,然后在脚本内部对其进行解码.

编辑提供一个例子:

script "$(printf '\x02\xc5\xd8' | base64 -)"
Run Code Online (Sandbox Code Playgroud)

脚本内部:

var=$(base64 -d -i <<<"$1")
Run Code Online (Sandbox Code Playgroud)

  • 同意.我还没有找到任何方法来获取bash来处理字符串中的零字节(\ x00),并且它倾向于添加/删除尾随换行符(\ x0a),因为它认为最好 - 在处理任意二进制文件时都非常糟糕数据. (2认同)