文字列に「Unicode リテラル」を含めるシェル固有の方法がいくつかあります。たとえば、Bash では、引用符で囲まれた文字列展開メカニズム により$''
、目に見えない文字 を直接埋め込むことができます$'\u2620'
。
ただし、普遍的なクロスプラットフォーム シェル スクリプトを作成しようとしている場合 (通常、これは「Bash、Zsh、および Dash で実行する」ように切り詰めることができます)、それは移植可能な機能ではありません。
次のような構成を使用して、ASCII テーブル (8 進数空間) 内のあらゆるものを移植可能に実現できます。
WHAT_A_CHARACTER="$(printf '\036')"
…しかし、POSIX / Dashprintf
は 8 進数のエスケープしかサポートしていません。
また、タスクをより完全なプログラミング環境にファームアウトすることで、明らかに完全な Unicode スペースを実現することもできます。
OH_CAPTAIN_MY_CAPTAIN="$(ruby -e 'print "\u2388"')"
TAKE_ME_OUT_TONIGHT="$(node -e 'console.log("\u266C")')"
したがって、そのような文字をシェルスクリプトにエンコードする最良の方法は何ですか?
dash
、bash
、およびzsh
で動作します。- コード内のコードポイントの 16 進エンコーディングを示します。
- 文字列の特定のエンコーディングに依存していない (つまり、UTF-8 バイトを 8 進数でエンコードしていない)
- 最後に、「重い」インタープリターを呼び出す必要はありません。(たとえば、実行時間は 0.01 秒未満です。)