UNIXのコマンドについて読みecho
ながら、バックスラッシュエスケープ解析を有効にするオプションが見つかりました-e
。問題は、これらのバックスラッシュエスケープシーケンスの1つが\\ですが、次の2つのコマンドを使用するときの問題は次のとおりです。
echo "hello\\\world"
そして
echo -e "hello\\\world"
同じ結果が出力されます: hello\\world 、違いは何ですか? |
ベストアンサー1
デフォルトは拡張エスケープシーケンスであり、-eオプションは非標準です。
echo出力に-eが含まれていない場合、echoの実装は非標準です。
ここでの問題は、いくつかの実装が最小POSIX要件のみに従い、互換性と呼ばれるUNIX
プラットフォームがXSI
POSIX改善のサポートを実装する必要があるという事実を無視することです。
注:MacOS XとSolarisのbashは常にエスケープシーケンスを拡張するようにコンパイルされています。デフォルトのコンパイルバリアントの Bash は POSIX XSI と互換性がありません。
POSIX互換シェル(ksh93、bosh、dashなど)は、デフォルトで必要に応じてエスケープシーケンスを拡張します。
動作を確認するには、文字列をテストするのは良い考えではありません。より良いテストは次のとおりです。
echo '\tfoo'
そして、foo
出力がタブ文字で始まることを確認してください。
おそらく問題があるのは、シェルを使用していて、シェルfoo\\bar
がすでに二重引用符で囲まれた文字列のバックスラッシュを処理するためです。動作を確認するには、echo
単一引用符で囲まれた文字列をパラメータとして使用する必要があります。