任意のデータを処理できるシェルコードを書くプロジェクトの一環として、私はヌルバイトを別の文字に変換する方法を探していました。tr
任意のバイトを8進数でエスケープする必要があることがわかりました。 Unixユーティリティのいくつかの他の非GNU実装(今は忘れました)も、出力\xHH
でより一般的で印刷できない文字の代わりに8進エスケープシーケンスを必要とし、8進エスケープシーケンスとして表示されます。 Linuxのループバックデバイスのサポートファイルは、以下にあります/sys/block/${LOOP_DEVICE}/loop/backing_file
。リテラルとして表示される印刷できない文字のサポートファイルパス\012
。
私は、8進エスケープシーケンスがPOSIX標準であるか、Unix時代から使用された慣行であると仮定します。 Unixは、使い方を\xHH
学んだtr
ときに、より新しくてサポートが少なくなりましたが、これらの疑いが正しいかどうかはわかりません。\OOO
過度に使用すると、\xHH
シェルスクリプト/関数の移植性が向上しますか?
答え1
サポートされる内容はユーティリティによって異なります。tr
そして、printf
POSIXは16進数シーケンスではなく8進数シーケンスのみをサポートします。ほとんどの最新の Unix システムは少なくとも POSIX 標準を実装しようとするので、通常は POSIX 標準の機能に頼ることは安全です。
POSIXが何をサポートしているのか知りたい場合は、最新バージョンオンラインでは、シェルとユーティリティのセクションで各ユーティリティに関する情報を表示できます。