Si la pérdida de la tasa de compresión del 33 % es aceptable para usted, entonces puede almacenar datos comprimidos codificados 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
Funcionará, pero cada 3 bytes (comprimidos) se almacenarán en 4 bytes de texto.
Cuando lo haces:
hey=$(echo "hello world" | gzip -cf)
No tienes los mismos bytes en la variable hey
como tienes en /tmp/myfile
creado por:
echo "hello world" | gzip -cf > /tmp/myfile
Obtiene el error "gzip:stdin es un archivo gzip de varias partes, no compatible" simplemente porque tiene datos comprimidos dañados que no se pueden descomprimir.
El VAR=$(...)
La construcción está diseñada para trabajar con texto. Esta es la razón por la que, por ejemplo, obtienes un recorte adicional.