带有未赋值变量的grep意外退出循环

时间:2015-08-27 17:13:23

标签: bash while-loop stdin

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

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

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

1 个答案:

答案 0 :(得分:3)

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

grep -i $currentView

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

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