
echo -e
これは通常のコマンドではないことはわかっています。試してみましたがecho '-e'
、echo \-e
まだ機能しません。
答え1
最善の解決策は を使用せずecho
、printf
代わりに を使用することです。
printf '%s\n' -e
これは任意の変数で機能します:
var=-e
printf '%s\n' "$var"
...つまり、値が設定されるという知識に基づいて、コードの他の場所で特別な準備や変更を行う必要はありませんecho
。
ちなみに、POSIXシェルコマンド仕様echo
実装された状態では移植不可能であることを認めており、その件に関する注記が含まれています。
-n (最初の引数) とエスケープ シーケンスの両方を省略しない限り、すべての POSIX システム間で echo を移植可能に使用することはできません。
printf ユーティリティは、次のように echo ユーティリティの従来の動作をエミュレートするために移植可能に使用できます (IFS が標準値であるか、設定されていないと仮定)。
歴史的な System V エコーと、POSIX.1-2008 のこの巻における XSI 実装の要件は、次のものと同等です。
printf "%b\n" "$*"
BSD echo は次のものと同等です:
if [ "X$1" = "X-n" ] then shift printf "%s" "$*" else printf "%s\n" "$*" fi
新しいアプリケーションでは、echo の代わりに printf を使用することをお勧めします。
(強調追加)。
とはいえ、GNU システムでは、標準に準拠した動作を要求するという代替手段が存在します。
$ POSIXLY_CORRECT=1 /bin/echo -e
-e
答え2
改行付き
echo -en '-e\n'
改行なし
echo -e '-e\c'
前後にスペースを入れます:
echo '-e ' echo ' -e'
バックスペースを使用する (Joseph R. に感謝):
echo -e ' \b-e'
(SPC BS - e LF を出力しますが、
-e
BS としてレンダリングされた端末に送信すると、カーソルが 1 列左に移動し、-
SPC が上書きされます)
bash
の組み込みの動作は、echo
bash のバージョンによって異なる場合があります。また、環境 ( POSIXLY_CORRECT
、SHELLOPTS
およびBASHOPTS
変数)、オプション ( posix
、xpg_echo
)、ビルド オプション、およびargv[0]
( sh
vs ) によっても異なります。ここでは、 、デフォルト ビルド、デフォルト オプション、空の環境、 として呼び出された状態bash
でテストされています。でも動作します。GNU bash 4.2.53(1)
bash
zsh 5.0.5
答え3
GNU ではecho
文字-e
の ASCII コードは次のようになります:
$ /bin/echo -e '\055'e
-e
055
は 8 進 ASCII 番号です-
(man ascii
クイック リファレンスについては を参照してください)。
答え4
改行を避けるために使用します-n
:
$ echo -n - && echo e
-e