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

时间:2012-02-28 17:45:11

标签: bash character-encoding parameters

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

这是一个接受一个论点的程序:

script arg1

但是我不想使用字符串arg1,而是传递一些不是很好的ASCII字符的字节 - 特别是字节0x020xc5和{{1 }}

我该怎么做?

5 个答案:

答案 0 :(得分:20)

使用$''引用样式:

script $'\x02\xc5\xd8'

测试:

printf $'\x02\xc5\xd8' | hexdump -C
00000000  02 c5 d8

答案 1 :(得分:19)

script "`printf "\x02\xc5\xd8"`"
script "`echo -e "\x02\xc5\xd8"`"

试验:

# echo -n "`echo -e "\x02\xc5\xd8"`" | hexdump -C
00000000  02 c5 d8                                          |...|

答案 2 :(得分:5)

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

编辑提供一个例子:

script "$(printf '\x02\xc5\xd8' | base64 -)"

脚本内部:

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

答案 3 :(得分:0)

这个怎么样?

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

答案 4 :(得分:-1)

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

script "`cat file`"