PS1のような変数では\ 033エスケープが機能しますが、\ x 1bでは機能しないのはなぜですか?

PS1のような変数では\ 033エスケープが機能しますが、\ x 1bでは機能しないのはなぜですか?

echo組み込み文書によるとprintf\033とは\x1bすべて同じASCII制御コード(Esc、10進数27)に変換する必要があります。

単純なコマンド\x1bと同じように動作しますが、プロンプト変数(たとえば、Why?)では互いに置き換えて使用することはできません。\033echo -ePS1

答え1

Bashにはこれを解釈できる条項がないからです。図からわかるようにヒントマニュアルページのセクションでは、bash(1)任意の文字に対して8進数のエスケープのみが許可されています。

についてはなぜこの欠落が存在し、POSIX shとの互換性のためであると推測できますが、Bash FAQバージョン4.12でもまだこのトピックを扱っていないため、Chet Rameyに直接連絡する必要があります。

答え2

再殻:

\x1bBusybox v1.33.1でコンパイルされたASHシェルがそれを正しく解釈していることを確認できます。

Ignacio Vazquez-Abramsの答えに追加するために、BASHがまだ一般的な「印刷」ユーティリティを使用して16進エスケープパターンを印刷するのは、これらの項目を処理するためにエンコードされているためです。各実行ファイルの次のマニュアルページの抜粋を参照してください。

echo -e '\x61'

-e     enable interpretation of backslash escapes
\xHH   byte with hexadecimal value HH (1 to 2 digits)

printf '\x61\n'

\xHH   byte with hexadecimal value HH (1 to 2 digits)

bashただ

\e
  An escape character.
\nnn
  The character whose ASCII code is the octal value nnn.

PS.:

  • 私はiPadとして使ってみました。iSHアプリ/bin/ash -> /bin/busybox、デフォルトのシェルとして実行されます。

関連情報