Si une perte de taux de compression de 33 % est acceptable pour vous, vous pouvez stocker des données compressées encodées en base64 :
me$mybox$ FOO=$(echo "Hello world" | gzip | base64 -w0) # compressed, base64 encoded data
me$mybox$ echo $FOO | base64 -d | gunzip # use base64 decoded, uncompressed data
Hello world
Cela fonctionnera, mais chaque 3 octets (compressés) seront stockés dans 4 octets de texte.
Lorsque vous faites :
hey=$(echo "hello world" | gzip -cf)
Vous n'avez pas les mêmes octets dans la variable hey
comme vous l'avez dans /tmp/myfile
créé par :
echo "hello world" | gzip -cf > /tmp/myfile
Vous obtenez l'erreur "gzip :stdin est un fichier gzip en plusieurs parties -- non pris en charge" simplement parce que vous avez endommagé des données compressées qui ne peuvent pas être décompressées.
Le VAR=$(...)
construction est conçue pour travailler avec du texte. C'est pourquoi vous obtenez une garniture de fuite supplémentaire par exemple.