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