シェルスクリプトの8進エスケープシーケンスは、16進エスケープシーケンスよりも移植性が優れていますか?

シェルスクリプトの8進エスケープシーケンスは、16進エスケープシーケンスよりも移植性が優れていますか?

任意のデータを処理できるシェルコードを書くプロジェクトの一環として、私はヌルバイトを別の文字に変換する方法を探していました。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そして、printfPOSIXは16進数シーケンスではなく8進数シーケンスのみをサポートします。ほとんどの最新の Unix システムは少なくとも POSIX 標準を実装しようとするので、通常は POSIX 標準の機能に頼ることは安全です。

POSIXが何をサポートしているのか知りたい場合は、最新バージョンオンラインでは、シェルとユーティリティのセクションで各ユーティリティに関する情報を表示できます。

関連情報