[root@test testdir]# echo abc$'\n'z
abc
z
途中で行頭に移動
[root@test testdir]# echo abc$'\r'z
zbc
[root@test testdir]# echo abc$'\r'zz
zzc
[root@test testdir]# echo abc$'\r'zzz
zzz
途中で改行する
[root@test testdir]# echo abc$'\n'zzz
abc
zzz
[root@test testdir]#
■16進数で出力して、バイトコードを確かめた。
〇echoコマンドで、CRを出力し、16進数表記に変換
[root@test testdir]# echo $'\r' | hexdump
0000000 0a0d
0000002
上記2バイト0a0dは、アドレスの順序がひっくり返って表示されているように見えるので注意する。
即ち、下記のように、0dのバイトコードの方が先のアドレスにある。
後の0aは、echoコマンドが最後に自動的に付加したものである。
0番目 0d
1番目 0a
2番目
〇echoコマンドで、LFを出力し、16進数表記に変換
[root@test testdir]# echo $'\n' | hexdump
0000000 0a0a
0000002
〇echoコマンドで、CRとLFを出力して、16進数表記に変換
[root@test testdir]# echo $'\r\n' | hexdump0番目 0d
0000000 0a0d 000a
0000003
1番目 0a
2番目 0a
3番目 00
■UNIXと、Windowsの改行コードの違いと、相互変換について
LF( \n )は、UNIXの改行コードである。
CR LF( \d\n )は、Windowsでの改行コードである。
次のようにして相互に変換することができる。
〇UNIXの改行コードLF( \n )を、Windowsの改行コードCR LF( \d\n )に変換する。
最初に、 UNIXの改行コードLF( \n )をそのまま表示させた。
[root@test testdir]# echo $'\n' | hexdump
0000000 0a0a
0000002
変換した。
[root@test testdir]# echo $'\n' | unix2dos | hexdump
0000000 0a0d 0a0d0aが、0dと0aに変換されたことがわかる。
0000004
後の、0a0d は、echoコマンドが自動的に付加した0aが変換されたものである。
0番目 0d
1番目 0a
2番目 0d
3番目 0a
〇Windowsの改行コードCR LF( \d\n )をUNIXの改行コードLF( \n )に変換する。
最初に、 WINDOWSの改行コードCR LF( \r\n )をそのまま表示させた。
[root@test testdir]# echo $'\r\n' | hexdump
0000000 0a0d 000a
0000003
変換した。
[root@test testdir]# echo $'\r\n' | dos2unix | hexdump
0000000 0a0a
0000002
0d0aが、0aに変換されたことがわかる。
echoコマンドが自動的に付加した0aは、UNIXの改行コードなので影響を受けていない。
(参考)
・What is the exact meaning of IFS=$'\n'?
< http://stackoverflow.com/questions/4128235/what-is-the-exact-meaning-of-ifs-n > 2016年9月9日