Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在bash中将二进制文件读入变量_Bash_Binaryfiles - Fatal编程技术网

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

在bash中将二进制文件读入变量,bash,binaryfiles,Bash,Binaryfiles,我有下面的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.c

我有下面的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
顺便说一句,我建议使用小写或混合大小写的变量名(有一堆具有特殊含义的所有caps变量,偶然使用其中一个可能会产生奇怪的效果),还建议使用
$()
而不是反勾号(更容易阅读,并避免一些模糊的语法奇怪)