回答:
ここでは、文字列のリダイレクトは、( <<<
)のシンプルな形でここにドキュメントリダイレクト(<<
)。ここで、文字列のリダイレクトは「バイナリセーフ」ではありません。Bashはhere文字列で展開を実行します。さらに、Bashはhere文字列の最後に改行を追加します(コマンドxxd -p <<< "foo"
を発行すると666f6f0a
、代わりに返されます)。
パイプを除く唯一の安全な方法は、I / Oリダイレクトです。
ここでは、バイナリセーフでない質問に似ています。エンコードされたデータを保存してこれを試すことができます
COMMAND_WITH_BIN_INPUT <(uudecode <(echo "$uuEncodedData"))
しかし、これはそう遠くない
echo "$uuEncodedData"|uudecode|COMMAND_WITH_BIN_INPUT
しかし、パイプメタチャーはありません。
od -a <<< ""
、あなたが表示されますnl
進値の代わりに。
Bashは一般にバイナリセーフではないため、置換中にバイナリコンテンツを含む変数のヌルと改行が破損します。
したがって、答えは「いいえ」ですが、より根本的には「シェルスクリプト言語ではない」と思います。これらはすべてバイナリに問題があるようだからです。
ただし、データを$ GIFに入れるか、ファイルに入れるか、バイナリデータを問題なく処理する代替スクリプト言語としてpythonを使用することを計画していると思います。
$GIF
ため、開始時の変数は、開始前でもフルバイナリを保持していません。ただし、NUL文字を除き、他のすべてを保持しています。(参照として:vaab.blog.kal.fr/2014/05/03/…)