-eオプションを含むUnix echoコマンド

-eオプションを含むUnix echoコマンド

UNIXのコマンドについて読みechoながら、バックスラッシュエスケープ解析を有効にするオプションが見つかりました-e。問題は、これらのバックスラッシュエスケープシーケンスの1つが\\ですが、次の2つのコマンドを使用するときの問題は次のとおりです。

echo "hello\\\world"

そして

echo -e "hello\\\world"

同じ結果が出力されます: hello\\world 、違いは何ですか? |

ベストアンサー1

デフォルトは拡張エスケープシーケンスであり、-eオプションは非標準です。

echo出力に-eが含まれていない場合、echoの実装は非標準です。

ここでの問題は、いくつかの実装が最小POSIX要件のみに従い、互換性と呼ばれるUNIXプラットフォームがXSIPOSIX改善のサポートを実装する必要があるという事実を無視することです。

注:MacOS XとSolarisのbashは常にエスケープシーケンスを拡張するようにコンパイルされています。デフォルトのコンパイルバリアントの Bash は POSIX XSI と互換性がありません。

POSIX互換シェル(ksh93、bosh、dashなど)は、デフォルトで必要に応じてエスケープシーケンスを拡張します。

動作を確認するには、文字列をテストするのは良い考えではありません。より良いテストは次のとおりです。

echo '\tfoo'

そして、foo出力がタブ文字で始まることを確認してください。

おそらく問題があるのは、シェルを使用していて、シェルfoo\\barがすでに二重引用符で囲まれた文字列のバックスラッシュを処理するためです。動作を確認するには、echo単一引用符で囲まれた文字列をパラメータとして使用する必要があります。

おすすめ記事