echo -eが新しい行を解釈しないのはなぜですか?

echo -eが新しい行を解釈しないのはなぜですか?

Bashでこの行を書くとき

new_line="new\nline"

期待される結果を得る。

echo $new_line
new\nline

これは期待どおりに機能します。

echo -e $new_line 
new
line

マニュアルに記載されているように:-e enable interpretation of backslash escapes しかし、これは解釈された改行文字を提供しません\n

cur_log=$(who)
echo -e $cur_log
myuser pts/0 2017-01-19 07:10 (:0) myuser pts/1 2017-01-19 09:26 (:0) myuser pts/4 2017-01-19 09:14 (:0)

私は改行がないと思いますが、次のように書く場合:

echo "$cur_log"

改行文字の説明を聞きます。

myuser  pts/0        2017-01-19 07:10 (:0)
myuser  pts/1        2017-01-19 09:26 (:0)
myuser  pts/4        2017-01-19 09:14 (:0)

echo -e $cur_log改行文字は解釈されませんが、 `echo -e $new_line が解釈されるのはなぜですか?

ベストアンサー1

その理由は、最初の変数()には変更されていない状態で渡されるエスケープシーケンス(つまり=の後に=)new_lineだけがあり、2番目の変数()には実際の改行文字があるためです。これらの改行文字は、次のように変数から削除されます。シェルの一部。\nbackslashnechocur_logIFS

Unix / Linuxでは、新しい行は文字です。ASCIIコードコードは10(改行)です。この文字を含むファイルが画面に表示されると、キャリッジリターンと改行(CR-LF)、10+の2文字に変換されます13。このようなエディタは、geditそのようなファイルを開くと各行を個別に保存します。改行は、連続した2行の間隔を検出するためにのみ使用されます。\nASCII 92+の2文字で構成されています110。これらの2文字を含むファイルを編集すると、ファイルは\n実際の改行文字とは異なり、変更されずにそのまま表示されます。

おすすめ記事