1

ここで何が起きているか:

$ エコー $SHELL
/ビン/バッシュ
$ echo -e "foo"
ふー
エコーする$
/ビン/エコー
$ /bin/echo -e "foo"
-e フー

直接使用する場合のように、最後の出力は「foo」であると予想されますecho

4

1 に答える 1

4

/bin/echoechoはプログラムであり、Bashの組み込みコマンドとは異なります。

POSIX標準によると、echo引数を取るべきではありません。Bashechoコマンドはこの標準に準拠しておらず、GNUCoreutilsバージョンも準拠していません。他のバージョンはより厳密な場合があります。

/bin/echoフラグを付けて呼び出すことでバージョンを確認するか--version、フラグの助けになるかどうかを確認してください--help


また、man whichこれを示しています:

これは、現在の環境で実行されるファイル(またはリンク)のパス名を返します。引数が厳密にPOSIX準拠のシェルでコマンドとして指定されている場合。

Bashは厳密にはPOSIXに準拠していないため、の戻り値は異なるwhich場合があります(この場合、echo組み込みのために異なります)。


詳細については、bashスクリプトのechooutput-eパラメーターの回答を参照してください。どうすればこれを防ぐことができますか?

于 2012-06-19T10:38:20.880 に答える