mic*_*yer 8 bash shell built-in
我注意到有一段时间,read如果没有文件的最后一行,那么它最后就不会读取一个"换行符".如果考虑到这一点,这是可以理解的,只要文件中没有"换行"字符,就好像它包含0行(这很难承认!).例如,请参阅以下内容:
$ echo 'foo' > bar ; wc -l bar
1 bar
Run Code Online (Sandbox Code Playgroud)
但...
$ echo -n 'bar' > foo ; wc -l foo
0 foo
Run Code Online (Sandbox Code Playgroud)
那么问题是:当我使用read处理尚未由我自己创建或修改的文件时,如何处理这种情况,以及我不知道它们是否真的以"换行符"结尾?
kop*_*hke 15
read事实上,将未终止的行读入指定的var($REPLY默认情况下).它也在这样一行上返回false,这意味着"文件结束"; 直接在经典while循环中使用其返回值,从而跳过最后一行.如果稍微更改循环逻辑,则可以正确处理非新行终止文件,而无需事先进行预防,具有read:
while read -r || [[ -n "$REPLY" ]]; do
# your processing of $REPLY here
done < "/path/to/file"
Run Code Online (Sandbox Code Playgroud)
请注意,这比依赖外部的解决方案要快得多.
向Gordon Davisson提示改进循环逻辑.
| 归档时间: |
|
| 查看次数: |
6916 次 |
| 最近记录: |