私はこれが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
組み込み機能の動作は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
GNUecho
文字の-e
ASCIIコード:
$ /bin/echo -e '\055'e
-e
055
8進数のASCII番号-
(man ascii
クイックリファレンスを参照)。
答え4
-n
改行を防ぐために使用されます。
$ echo -n - && echo e
-e