【发布时间】:2011-05-09 02:03:16
【问题描述】:
假设我有以下 Bash 脚本:
while read SCRIPT_SOURCE_LINE; do
echo "$SCRIPT_SOURCE_LINE"
done
我注意到对于末尾没有换行符的文件,这将有效地跳过最后一行。
我一直在寻找解决方案and found this:
当读取到达文件末尾时 行尾,它确实读入 数据并将其分配给变量, 但它以非零状态退出。 如果您的循环构造为“while 阅读;做事;完成
所以不是测试读取出口 直接状态,测试一个标志,并有 读取命令设置该标志 在循环体内。那样 无论读取退出状态如何, 整个循环体运行,因为 read 只是命令列表之一 像任何其他的一样在循环中,而不是 循环是否会的决定因素 跑起来。
DONE=false until $DONE ;do read || DONE=true # process $REPLY here done < /path/to/file.in
如何重写此解决方案以使其行为与我之前的 while 循环完全相同,即无需对输入文件的位置进行硬编码?
【问题讨论】: