我的 shell 变量在 while 循环内的 if 语句中

my shell variable in if statement which is inside of while loop

我有下面的 while 循环,它逐行读取文件中的错误代码,如果在 log.txt 文件中找到此错误代码,那么我需要设置 alert=1 然后写入这些错误shell 变量,用分号连接它们。但是当我在下面写 while 循环时,它没有给出预期的结果。

log.txt文件数据:
ORA-03113
ORA-00933

errors.lst 文件数据:
ORA-03113
ORA-00933
错误

export LOGFILE=/temp/log.txt
alert=0
error=""
while IFS= read -r line || [[ -n "$line" ]]; do
if grep -q $line "$LOGFILE"; then
alert=1
error="${error};${line}"
fi
done < errors.lst
echo $alert
echo $error

我期待以下输出:
;ORA-03113;ORA-00933

但我的输出低于:
;ORA-00933

你能帮帮我吗,我哪里做错了。

您的文件似乎包含 \r(回车符 return,ASCII 0xd).当您的终端模拟器看到它时,它会删除所有它 到目前为止已经显示并移动到该行的开头。这些 carriage return 字符最常来自 Windows-style 行 结局。 运行 dos2unix 删除输入文件:

dos2unix log.txt errors.lst