나는 이것이 단순해야한다는 것을 알고 있지만, 나는 그것을 보지 않고 있습니다. 우리는 데이터베이스에 스피커의 일련의 단일 라인을 포함하는 SpeakerList.txt
파일을 가지고 있습니다. new.trs
에는 공백으로 구분 된 데이터베이스 버전이 있습니다. 데이터베이스에서 연사를 찾았는지 확인해야하므로 스피커 이름으로 시작하는 줄에 grep
을 실행하고 있습니다. 다음 코드는 모든 스피커에 대해 항상 if
문을 트리거합니다. 나는 파일 존재를 확인하는 코드와 비슷한 코드를 가지고 있으며 잘 작동한다. 내가 뭘 놓치고 있니? 나는 내 grep
루프가 실행 중임을 알고 있습니다 - 디버그로 시도했습니다. echo
라인. 나는 또한 $speakerFound
필드를 인쇄 해보고, "찾았습니다"라고 표시된 진술서가있을 때에도 실제로 마지막에 아무 것도 표시되지 않았 음을 확인했습니다.Bash - 플래그가 파일의 증거를 찾지 못하도록 설정되어 있지 않습니다.
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
또는 수표를 함수로 이동하고'return'을 사용하여 종료 코드를 설정 한 다음 확인할 수 있습니다. –
나는 OP가 결과 코드 이상을 필요로한다고 가정하고 있지만, 그렇다면 체크를 함수로 옮길 필요가 없다. 명시 적으로 루프를 서브 쉘 ('(...) '을 통해)에서 실행할 수 있으며'exit'을 호출하면됩니다. –
larsks
실제로 그렇게했습니다. 발견 된 스피커에 대한 더미 파일을 만들고 제거하도록 코드를 변경했습니다. 나는 grep 출력을보고있는'while' 루프 안에 있었기 때문에 다른 하나가 작동했다고 생각합니다. 고맙습니다. –