KDOC 454: シェルでバイナリが文字列表示されるのはなぜか?
この文書のステータス
- 作成
- 2025-10-22 貴島
- レビュー
- 2025-10-22 貴島
概要
xxdでASCIIコードを渡して文字列表示できる。
echo -n "6865 6c6c 6f0a" | xxd -r -p
hello
xxdはバイナリ <–> 16進数を変換表示するコマンド- -r オプションで、16進数表示からバイナリ表示に切り替わる
ここで生まれる疑問は、 -r オプションによって16進数表示から「バイナリ」表示に切り替わっているはずだが、アルファベットが表示されていることだ。
仮定は、「ASCIIで解釈可能なバイナリは端末上で表示すると解釈されてアルファベット表示される」だ。
printf '\x61' > a.bin
cat a.bin
rm a.bin # 片付け
a
考えてみると、プレーンテキストだろうと何でもバイナリで保存されている。端末が解釈してアルファベット表示するのは自然である。
さらに直感的に確認する方法か公式仕様を知りたい。
関連
抽象。
- 同じデータでも、表示する側の解釈で見え方が変わる
関連。
- 追加調査: 仮定を確認する方法を調べる
- 追加調査: シェルのバイナリ表示の仕様を調べる
- 類似: KDOC 95: なぜjson.Unmarshalの引数はバイト列なのか。文字列も中身はバイト列である、という点が共通する
- 補足: KDOC 126: xxdでファイルをバイナリで見る。バイトの並びを数値の表記で見る、逆向きの操作
- 類似: KDOC 80: 「あ」がどうして343 201 202になるのか。同じバイト列が、解釈する側しだいで別の見え方になる例