それではいつ?誰でもこれを説明できますか?
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つの単語はその引数になります。解析された引数のみが表示されます。このオプションが提供されるため、コマンドは通常エスケープを解釈しますが、文字列内ではシェルが渡す文字列であるためです。-e
trte\ree
echo
-e
echo
trte\ree
2番目の引数を一重引用符で囲むと、シェルは文字を\
解釈できなくなり、そのまま渡すことができますecho
。したがって:
echo -e '\tr\t\e\\re\e'
シェルは、echo
最初-e
と2番目の引数を使用して呼び出されます\tr\t\e\\re\e
。これでecho
、すべてのエスケープシーケンスを解釈する必要があります。