假设我有以下 Bash 脚本:
while read SCRIPT_SOURCE_LINE; do
echo "$SCRIPT_SOURCE_LINE"
done
我注意到,对于末尾没有换行符的文件,这将有效地跳过最后一行。
我四处寻找解决方案并发现了这个 http://linux.derkeiler.com/Mailing-Lists/SuSE/2008-11/msg00237.html:
当读取到达文件末尾时
行尾,它确实读入
数据并将其分配给变量,
但它以非零状态退出。
如果你的循环是构建的“while
读;做事;完成
所以不要测试读取出口
直接状态,测试标志,并有
读取命令设置该标志
在循环体内。那样
无论读取退出状态如何,
整个循环体运行,因为 read
只是命令列表之一
像其他循环一样,而不是
循环是否会发生的决定因素
根本就跑吧。
DONE=false
until $DONE ;do
read || DONE=true
# process $REPLY here
done < /path/to/file.in
我怎样才能重写这个解决方案,使其行为与while
我之前有过循环,即没有对输入文件的位置进行硬编码?
我使用以下结构:
while IFS= read -r LINE || [[ -n "$LINE" ]]; do
echo "$LINE"
done
它几乎适用于输入中除空字符之外的任何内容:
- 以空行开头或结尾的文件
- 以空格开头或结尾的行
- 没有终止换行符的文件
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)