(Un/De)compress a string in bash?
If 33% compression rate loss is acceptable for you, then you can store base64 encoded compressed data:
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
It will work, but each 3 (compressed) bytes will be stored in 4 bytes of text.
When you do:
hey=$(echo "hello world" | gzip -cf)
You don't have same same bytes in variable hey
as you have in /tmp/myfile
created by:
echo "hello world" | gzip -cf > /tmp/myfile
You get "gzip: stdin is a multi-part gzip file -- not supported" error simply because you have broken compressed data which cannot be uncompressed.
The VAR=$(...)
construction is designed for working with text. This is why you get extra trailing trim for example.