bashでNULL文字を出力したい

NULL(¥0)文字を出力するには以下のようにする

$ echo -en 'a\x00b' | hexdump -C
00000000  61 00 62                                          |a.b|
00000003
$ printf 'a\x00b' | hexdump -C
00000000  61 00 62                                          |a.b|
00000003

hex 指定の '\x00' のかわりに digit 指定の '¥0' も可能。

echo-e はバックスラッシュのエスケープを有効にする。 同様に'\t' などもつかえる。
echo-n は改行を抑制する。

echo と printf の違い

echoprintf の違いは次の URL を参照

Difference between printf and echo in bash
http://unix.stackexchange.com/questions/58310/difference-between-printf-and-echo-in-bash

bash で NULL 文字を含んだ文字列を変数に代入したい

結論から言えば bash ではできないみたい。
echo などでファイルにリダイレクトして、そのファイルを読み込んで処理するといった回避が必要。

頑張れば以下のように xxd 経由でヘックスダンプにエンコード/デコードすることもできるみたいだけど、ちょっと違うかな。

$ VAR1=`echo -ne "a\0b" | xxd -p | tr -d '\n'`
$ echo -ne "$VAR1" | xxd -r -p | hexdump  -C
00000000  61 00 62                                          |a.b|
00000003

参考:assign string containing null-character () to a variable in bash
http://stackoverflow.com/questions/6570531/assign-string-containing-null-character-0-to-a-variable-in-bash

Advertisements
Tagged with: ,
Posted in linux

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Archives
%d bloggers like this: