echo -eは引用符を使用しないときにどのような違いがありますか?

echo -eは引用符を使用しないときにどのような違いがありますか?

それではいつ?誰でもこれを説明できますか?

echo -e \tr\t\e\\re\e
#eete 
echo \tr\t\e\\re\e
#trte\ree

ベストアンサー1

これは、シェルecho自体ではなく、シェルがコマンドを解析する方法に関連しています。最初の例を見てください。

echo -e \tr\t\e\\re\e

バックスラッシュは引用符の外側に表示されるため、シェルはこれらのバックスラッシュをエスケープマークとして解釈し、バックスラッシュの後に続く文字の(シェルに対する)特別な意味を削除します。シェルはこのコード行を3つの単語で解析しますecho。最初の単語は実行されるコマンドになり、次の2つの単語はその引数になります。解析された引数のみが表示されます。このオプションが提供されるため、コマンドは通常エスケープを解釈しますが、文字列内ではシェルが渡す文字列であるためです。-etrte\reeecho-eechotrte\ree

2番目の引数を一重引用符で囲むと、シェルは文字を\解釈できなくなり、そのまま渡すことができますecho。したがって:

echo -e '\tr\t\e\\re\e'

シェルは、echo最初-eと2番目の引数を使用して呼び出されます\tr\t\e\\re\e。これでecho、すべてのエスケープシーケンスを解釈する必要があります。

おすすめ記事