gpt4 book ai didi

bash - 将二进制文件读入bash中的变量中

转载 作者:行者123 更新时间:2023-12-03 03:33:14 26 4
gpt4 key购买 nike

我有以下 bash 脚本。我希望文件 out.1 和 out.2 相同,但它们是不同的。我怀疑问题在于 bash 如何处理二进制文件。那么在 bash 中将二进制文件读入变量的正确方法是什么?

curl -s http://cacerts.digicert.com/DigiCertSHA2HighAssuranceServerCA.crt > out.1
A=`curl -s http://cacerts.digicert.com/DigiCertSHA2HighAssuranceServerCA.crt`
echo "$A" > out.2
diff out.1 out.2

最佳答案

bash 变量(以及环境变量、unix 参数等)不是二进制安全的。最大的问题是它们不能包含零字节(即 ASCII NUL 字符),因为那是字符串终止符。在某些情况下,在末尾删除/添加换行符也存在问题,并且某些版本的 echo 将反斜杠字符视为需要解释的转义符。基本上,答案是:不要尝试在 shell 中存储二进制数据。

但是您可以将数据转换为非二进制格式(十六进制、base64、uuencode 等),并以该形式存储、传递等数据。只要确保在适当的地方转换格式即可。下面是使用 base64 的示例:

$ curl -s http://cacerts.digicert.com/DigiCertSHA2HighAssuranceServerCA.crt > out.1
$ a=$(curl -s http://cacerts.digicert.com/DigiCertSHA2HighAssuranceServerCA.crt | base64)
$ echo "$a" | base64 -d >out.2
$ diff -s out.*
Files out.1 and out.2 are identical

顺便说一句,我建议使用小写或混合大小写的变量名(有一堆具有特殊含义的全大写变量,意外使用其中一个可能会产生奇怪的效果),并且还使用 $ ( ) 而不是反引号(更易于阅读,并避免一些晦涩的语法异常)。

关于bash - 将二进制文件读入bash中的变量中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55132218/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com