echo
組み込み文書によるとprintf
、\033
とは\x1b
すべて同じASCII制御コード(Esc、10進数27)に変換する必要があります。
単純なコマンド\x1b
と同じように動作しますが、プロンプト変数(たとえば、Why?)では互いに置き換えて使用することはできません。\033
echo -e
PS1
答え1
Bashにはこれを解釈できる条項がないからです。図からわかるようにヒントマニュアルページのセクションでは、bash(1)
任意の文字に対して8進数のエスケープのみが許可されています。
についてはなぜこの欠落が存在し、POSIX shとの互換性のためであると推測できますが、Bash FAQバージョン4.12でもまだこのトピックを扱っていないため、Chet Rameyに直接連絡する必要があります。
答え2
再殻:
\x1b
Busybox 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
、デフォルトのシェルとして実行されます。