私はddでいくつかのトリックをしようとしています。私はそれをddにパイプするために "header"と呼ばれる変数にいくつかの16進値を格納することが可能であると考えました。
変数なしの最初のステップはこれでした:
$ echo -ne "\x36\xc9\xda\x00\xb4" |dd of=hex
$ hd hex
00000000 36 c9 da 00 b4 |6....|
00000005
その後私はこれを試しました:
$ header=$(echo -ne "\x36\xc9\xda\x00\xb4")
$ echo -n $header | hd
00000000 36 c9 da b4 |6...|
00000004
ご覧のとおり、私は\x00
の値$header
変数。誰かがこの動作の説明をしていますか?これは私を夢中にさせています。
代わりに、変数にNUL文字を格納できる唯一のシェルであるzsh
を使用できます。その文字はたまたまデフォルト値$IFS
in zsh
。
nul=$'\0'
または:
nul=$'\x0'
または
nul=$'\u0000'
または
nul=$(printf '\0')
ただし、引数や環境変数はexecve()
システムに渡されるNUL区切りの文字列であるため、このような変数をexecutedのコマンドに引数または環境変数として渡すことはできません。呼び出し(シェルではなく、システムのAPIの制限)。ただし、zsh
では、関数または組み込みコマンドの引数としてNULバイトを渡すことができます。
echo $'\0' # works
/bin/echo $'\0' # doesn't