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

在bash中将二进制数据作为参数传递,bash,character-encoding,parameters,Bash,Character Encoding,Parameters,我需要将二进制数据传递给接受命令行参数的bash程序。有办法做到这一点吗 它是一个接受一个参数的程序: script arg1 但是我想传递一些不是好的ASCII字符的字节,而不是字符串arg1,特别是0x02、0xc5和0xd8 我该怎么做?这个怎么样 $ script "`printf "\x02\xc5\xd8"`" 将二进制数据保存到文件中,然后执行以下操作: script "`cat file`" Bash不擅长处理二进制数据。我建议使用base64对其进行编码,然后在脚本内部对

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

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

script arg1
但是我想传递一些不是好的ASCII字符的字节,而不是字符串
arg1
,特别是
0x02
0xc5
0xd8

我该怎么做?

这个怎么样

$ script "`printf "\x02\xc5\xd8"`"

将二进制数据保存到文件中,然后执行以下操作:

script "`cat file`"

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

编辑以提供示例:

script "$(printf '\x02\xc5\xd8' | base64 -)"
脚本内部:

var=$(base64 -d -i <<<"$1")
var=$(base64-d-i
测试:

使用
$''
报价样式:

script $'\x02\xc5\xd8'
测试:


您不希望bash处理该参数…
脚本“`printf”\x02\xc5\xd8”`
@yi\u H这是一个很好的观点。已应用修复程序,这将直接导致您的答案:)UUOC。脚本$(你在脚本中做什么?你预期的结果是什么?@jordanm:不是$(这是一个特定于bash的扩展。这个问题只标记了bash,所以他可能会在脚本的顶部有#!/bin/bash。同意。我还没有找到任何方法让bash处理零字节(\x00)在字符串中,它倾向于添加/删除它认为最好的尾随换行符(\x0a)——在处理任意二进制数据时,这两者都非常糟糕。我相信您的测试相当于更简单的
echo-ne“\x02\xc5\xd8”| hextdump-C
:-)不完全是……这里我试图模拟
script
的实际调用,用
echo-n
$”
是引用的Bash机制
# echo -n "`echo -e "\x02\xc5\xd8"`" | hexdump -C
00000000  02 c5 d8                                          |...|
script $'\x02\xc5\xd8'
printf $'\x02\xc5\xd8' | hexdump -C
00000000  02 c5 d8