我有两个文件,这两个文件在我看来如下。
a
a
不同之处在于我使用vim
创建了其中一个,另一个使用了记事本的葡萄酒版本。我编写了以下脚本来一次打印这些文件的每一行,或多或少地模仿cat
(当然,这不是我的最终目标,但这是我想到的最简单的例子。)。
#!/usr/bin/env bash
readarray -t list_file < "$1"
for line in "${list_file[@]}"
do
echo "line content: \"$line\""
done
预计,vim
创建的文件(预期的5个字节:a[newline][newline]a[newline]
)为$1
,它会输出此文件。
line content: "a"
line content: ""
line content: "a"
出乎意料的是,记事本创建的文件(它是6个字节;我不知道为什么。)作为$1
,它输出了这个。为什么这样做?
"ine content: "a
"ine content: "
line content: "a"
我也尝试过完全不同的做法,但以下脚本完全同样的问题。
#!/usr/bin/env bash
for line_number in $(eval echo {1..$(wc -l < "$1")})
do
echo "line content: $(sed -n "${line_number}p" "$1")"
done
这些脚本导致它们在记事本创建的文件中表现如何?
答案 0 :(得分:3)
由vim
创建的文件的行以LF
结尾,与Unix一样。使用Notepad
创建的文件的行以CR LF
结尾,与DOS / Windows一样。 bash
使用LF
作为行分隔符,因此当它从第二个文件中读取时,它会在每行的末尾留下CR
。当您回显此字符时,它会使光标返回到左边距,而不会前进到下一行。