Bashが二重引用符で囲まれた文字列からゼロバイトを削除しないようにしますか?

Bashが二重引用符で囲まれた文字列からゼロバイトを削除しないようにしますか?

argvCプログラムの引数としてランダムバイトを指定する必要があります。

ただし、バイトが二重引用符で囲まれている場合は、次のようにゼロバイトが削除されます。

v="$(python -c 'import sys; sys.stdout.write("ABC\x18\x10\x00\x00\x10")')"
echo -n $v | hexdump -C
00000000  41 42 43 18 10 10                                 |ABC...|
00000006

実際、二重引用符はhexdump出力に表示されるようにゼロバイトを削除します。

python -c 'import sys; sys.stdout.write("ABC\x18\x10\x00\x00\x10")' | hexdump -C
00000000  41 42 43 18 10 00 00 10                           |ABC.....|
00000008

これらのランダムバイトをプログラムパラメータとしてどのように提供できますか?

答え1

Cプログラムのargvパラメーターにランダムバイトを指定する必要があります。

これはできません。定義によると、argvパラメーターは0で終わる文字列であるため、NULバイトを含めることはできません。パイプ、ファイル、共有メモリなどを介してプログラムにデータを渡すか、いくつかのエスケープとエスケープ解除を実行する必要があります。

bashその文字列(asまたはdo)でNULバイトがサポートされていても、zshこれらの文字列はコマンドライン引数や環境変数を介して他のプログラムに渡すことはできません。perlpython

関連情報