echoを使って「-e」を印刷するには?

echoを使って「-e」を印刷するには?

私はこれがecho -e一般的な命令ではないことを知っています。echo '-e'私はこれを試しましたが、echo \-eまだ動作しません。

答え1

最善の解決策はそれを使用するのではなくecho使用することですprintf

printf '%s\n' -e

これは任意の変数に対して機能します。

var=-e
printf '%s\n' "$var"

echo...これは、値がdという知識に基づいてコードの他の場所で特別な準備/修正を実行する必要がないことを意味します。


さて、POSIX シェルコマンド仕様echo実装時に移植が不可能であることを認識し、トピックに関する注意事項を含めてください。

-n(最初の引数)とエスケープシーケンスを省略しない限り、すべてのPOSIXシステムでechoを移植的に使用することはできません。

printfユーティリティは、次のようにechoユーティリティの一般的な動作をエミュレートするために使用できます(IFSに標準値があるか設定されていないと仮定)。

POSIX.1-2008 このボリュームの歴史的な System V エコおよび XSI 実装の要件は、次のとおりです。

printf "%b\n" "$*"

BSDエコーは次のとおりです。

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

bash組み込み機能の動作はechobashのバージョンによって異なります。また、環境(POSIXLY_CORRECTおよびSHELLOPTS変数BASHOPTS)、オプション(posix、、xpg_echo)、ビルドオプション、およびargv[0]shvs bash)によって異なります。ここでテストしたGNU bash 4.2.53(1)デフォルトのビルド、デフォルトのオプション、空の環境、bash。にも適用されますzsh 5.0.5

答え3

GNUecho文字の-eASCIIコード:

$ /bin/echo -e '\055'e
-e

0558進数のASCII番号-man asciiクイックリファレンスを参照)。

答え4

-n改行を防ぐために使用されます。

$ echo -n - && echo e
-e

関連情報