带有未分配变量的 grep 意外退出循环
grep with unassigned variable exits a loop unexpectedly
我有一个简单的 bash 脚本,到目前为止,它只读取文件的每一行并打印出来。足够简单:
while read i
do
echo $i
#otherViewDef=`grep -i $currentView $viewssqlfile`
done <$viewsdeffile
此脚本按预期工作,除非注释行未被注释。如果是这种情况,循环会在回显文件的第一行后退出。我知道这不应该工作,因为 currentView
和 viewsqlfile
都未设置,但是这种行为的理由是什么而不是报告错误并给出非零 return 信号?
我觉得有些不一样;这不可能是实际的脚本,因为错误会有所不同。假设 $currentView
已设置但 $viewssqlfile
未设置,则分配执行
grep -i $currentView
从 stdin 读取,这意味着它获取 $viewsdeffile
的内容。它找不到匹配项,因此不打印任何内容。之后,read i
无可读,returns false,循环退出。
换句话说,如果循环的控制 read
从重定向的标准输入读取,请确保 循环主体中没有程序 尝试从标准输入读取为出色地;他们都共享相同的标准输入。
将 set -x
放在顶部附近可能会提供一些见解。
我有一个简单的 bash 脚本,到目前为止,它只读取文件的每一行并打印出来。足够简单:
while read i
do
echo $i
#otherViewDef=`grep -i $currentView $viewssqlfile`
done <$viewsdeffile
此脚本按预期工作,除非注释行未被注释。如果是这种情况,循环会在回显文件的第一行后退出。我知道这不应该工作,因为 currentView
和 viewsqlfile
都未设置,但是这种行为的理由是什么而不是报告错误并给出非零 return 信号?
我觉得有些不一样;这不可能是实际的脚本,因为错误会有所不同。假设 $currentView
已设置但 $viewssqlfile
未设置,则分配执行
grep -i $currentView
从 stdin 读取,这意味着它获取 $viewsdeffile
的内容。它找不到匹配项,因此不打印任何内容。之后,read i
无可读,returns false,循环退出。
换句话说,如果循环的控制 read
从重定向的标准输入读取,请确保 循环主体中没有程序 尝试从标准输入读取为出色地;他们都共享相同的标准输入。
将 set -x
放在顶部附近可能会提供一些见解。