당신이 백 슬래시 필요하지 않습니다 -이 C 쉘이 아니다.
문제는 while 루프가 종료 서브 쉘에 있다고이지만 서브 쉘로 실행되기 때문에, 주요 스크립트가 계속됩니다. 맥락에서
는 간단한 수정은 아마도 :
while read line
do
line=`echo $line | tr "[:lower:]" "[:upper:]"`
if [ "`echo $line | cut -f1 -d:`" = "foo" ] &&
[ "`echo $line | cut -f2 -d:`" = "bar" ]; then
echo 'exist'
exit 1
fi
done < $1
당신이 (대신 '고양이 $ 1'의 '고양이'$에 @를 " ') 여러 파일을 처리 할 수있는 경우에, 당신은 일해야 조금 더 열심히 많이 힘들어 :이 1이 될 것이다 '동안'루프의 종료 상태 '고양이'와 '동안'으로 구성된 파이프 라인의 종료 상태를 확인
cat "[email protected]" |
while read line
do
line=`echo $line | tr "[:lower:]" "[:upper:]"`
if [ "`echo $line | cut -f1 -d:`" = "foo" ] &&
[ "`echo $line | cut -f2 -d:`" = "bar" ]; then
echo 'exist'
exit 1
fi
done
[ $? != 0 ] && exit 1
예 : 'foo : bar'가 행의 시작 부분에있는 경우.
grep -s -q "^foo:bar:" "[email protected]" && exit 1
이 많이에게 루프 버전보다 적은 명령을 실행합니다 :
은 물론, 같은 것을 감지하는 다른 방법이 있습니다. ('^ foo : bar $'를 허용해야하는 경우 일반 grep 대신 egrep을 사용하십시오.)
UUOC 함께 할 수 있습니다 : 고양이 대신 $ 1 | 모든 라인
-1 사용하여 외부 명령을 수행하는 동안 ... 잠시 ... 당신이 할 수 있습니다. – ghostdog74