带有未分配变量的 grep 意外退出循环

grep with unassigned variable exits a loop unexpectedly

我有一个简单的 bash 脚本,到目前为止,它只读取文件的每一行并打印出来。足够简单:

while read i
do
  echo $i
  #otherViewDef=`grep -i $currentView $viewssqlfile`
done <$viewsdeffile

此脚本按预期工作,除非注释行未被注释。如果是这种情况,循环会在回显文件的第一行后退出。我知道这不应该工作,因为 currentViewviewsqlfile 都未设置,但是这种行为的理由是什么而不是报告错误并给出非零 return 信号?

我觉得有些不一样;这不可能是实际的脚本,因为错误会有所不同。假设 $currentView 已设置但 $viewssqlfile 未设置,则分配执行

grep -i $currentView

从 stdin 读取,这意味着它获取 $viewsdeffile 的内容。它找不到匹配项,因此不打印任何内容。之后,read i 无可读,returns false,循环退出。

换句话说,如果循环的控制 read 从重定向的标准输入读取,请确保 循环主体中没有程序 尝试从标准输入读取为出色地;他们都共享相同的标准输入。 将 set -x 放在顶部附近可能会提供一些见解。