echo で '-e' を印刷するにはどうすればいいですか?

echo で '-e' を印刷するにはどうすればいいですか?

echo -eこれは通常のコマンドではないことはわかっています。試してみましたがecho '-e'echo \-eまだ機能しません。

答え1

最善の解決策は を使用せずechoprintf代わりに を使用することです。

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 を出力しますが、-eBS としてレンダリングされた端末に送信すると、カーソルが 1 列左に移動し、-SPC が上書きされます)

bashの組み込みの動作は、echobash のバージョンによって異なる場合があります。また、環境 ( POSIXLY_CORRECTSHELLOPTSおよびBASHOPTS変数)、オプション ( posixxpg_echo)、ビルド オプション、およびargv[0]( shvs ) によっても異なります。ここでは、 、デフォルト ビルド、デフォルト オプション、空の環境、 として呼び出された状態bashでテストされています。でも動作します。GNU bash 4.2.53(1)bashzsh 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

関連情報