\ tで始まる新しい行と文字列をエコーし​​ます。

\ tで始まる新しい行と文字列をエコーし​​ます。

もちろん、echo -eを使用すると、\ nが新しい行として認識されるようにすることができます。問題は、「\test」のように\tで始まるものをエコーし​​ようとしているときです。

私が公演したいとしましょうecho -e "test\n\\test"。私は出力を期待しています:

test
\test

しかし、代わりに出力は次のようになります。

test
  est

\\tリテラル\ tではなくタブ文字として解釈されます。この問題に対するクリーンな解決策はありますか?

ベストアンサー1

echo -e "\\t"

バックスラッシュは二重引用符の中で特別なので渡され\tます。それは次のように作用するechobash逃げる(参照)演算子。では、\\自分で逃げます。

次のことができます。

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'

%becho(some s)と同じエスケープシーケンスを理解しますがecho、最初の引数printf(形式)もシーケンスを理解しますが、echo少し異なる方法で理解します(他の言語で実行される方法と似ています)。とにかく\n両側は理解する。

おすすめ記事