もちろん、echo -eを使用すると、\ nが新しい行として認識されるようにすることができます。問題は、「\test」のように\tで始まるものをエコーしようとしているときです。
私が公演したいとしましょうecho -e "test\n\\test"
。私は出力を期待しています:
test \test
しかし、代わりに出力は次のようになります。
test est
\\t
リテラル\ tではなくタブ文字として解釈されます。この問題に対するクリーンな解決策はありますか?
ベストアンサー1
echo -e "\\t"
バックスラッシュは二重引用符の中で特別なので渡され\t
ます。それは次のように作用するecho
bash
逃げる(参照)演算子。では、\\
自分で逃げます。
次のことができます。
echo -e "\\\\t"
forecho
が渡されるか\\t
(それも機能します)、特別でないecho -e "\\\t"
一重引用符を使用できます。\
echo -e '\t'
今、echo
移植性が非常に低いコマンドです。でもbash
環境によって動作が異なる場合があります。私はそれを避け、代わりに使用することをお勧めしますprintf
。次のようにできます。
printf 'test\n\\test\n'
あるいは、どの部分がそのようなエスケープシーケンス拡張を受けるかを決定することもできる。
printf 'test\n%s\n' '\test'
または:
printf '%b%s\n' 'test\n' '\test'
%b
echo
(some s)と同じエスケープシーケンスを理解しますがecho
、最初の引数printf
(形式)もシーケンスを理解しますが、echo
少し異なる方法で理解します(他の言語で実行される方法と似ています)。とにかく\n
両側は理解する。