次のコマンドを使用した後、
pngString="$(cat example.png)"
echo -n "$pngString" > tmp.png
tmp.pngをPNGファイルとして開くことができません。$pngString
画像ファイルの保存に使用すると、一部の情報が失われる場合があります。
質問は次のとおりです。bashスクリプトの変数を使用して完全な画像情報を保存するにはどうすればよいですか。
catコマンドは正常に動作します(画像データを変数に保存するため)。二重引用符を削除するだけです。問題は、変数に保存した後、このデータで何をしたいですか?
—
coffeMug
cat
そしてecho
、そのすべてが中心的なテキストユーティリティです。バイナリファイルでそれらを無意識に緩めると、予測できない結果が生じます。そのようなものbase64
が発明されたのはそのためです。
なぜ変数として使用したいのですか?シェル変数は通常、大量のバイナリデータではなく、少量のテキストを格納することを目的としています。通常のシェルは、zshを除き、変数内のバイナリデータ(nullバイトでチョークする)に対処できません。
—
ジル「SO-悪であるのをやめる」
どうして
—
ワイルドカード
cat example.png > tmp.png
まだまだ良いのcp example.png tmp.png
ですか?
@Shadur
—
ワイルドカード
cat
は、実際にはテキストユーティリティではありません。コマンドの置換(末尾の改行を削除)、変数の割り当て(nullバイトを含めることはできません)、およびecho
コマンド(バックスラッシュシーケンスを解釈する可能性があります)は、バイナリではなくマングルcat
です。しかし、私はあなたの全体的なポイントに同意します。