我知道这必须简单,但我只是没有看到它。我们有一个文件SpeakerList.txt
,其中包含我们数据库中一系列扬声器的单行。 new.trs
包含数据库的空格分隔版本。我需要验证我们是否在数据库中找到了发言者,因此我正在为以发言人姓名开头的行运行grep
。以下代码始终会在每个发言者的最后触发if
语句。我有一些类似的代码检查文件存在,它工作得很好。我错过了什么?我知道我的grep
循环正在运行 - 我已尝试使用调试echo
行。我也尝试打印出$speakerFound
字段并确认它最后确实是空白的,即使我有一个声明显示它已被标记为“已找到”。
for i in `cat SpeakerList.txt`
do
speakerFound=""
echo "Speaker: $i"
grep "^$i" ~/work/new.trs | while read line
do
fileName=`echo $line | cut -d' ' -f 2`
speakerFound="found"
break
done
if [ "$speakerFound" == "" ]; then
echo "$i not found in database."
fi
done
答案 0 :(得分:3)
您正在子shell中设置speakerFound
变量。阅读this link了解更多详情,但一般情况下:
stdin
时,循环将在子shell中执行。一种解决方案是使用磁盘上的文件来包含结果(将其写入内部循环,并在需要结果时将其读回)。