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