루프의 마지막 명령이 성공했지만 상태 1로 종료됩니다.

루프의 마지막 명령이 성공했지만 상태 1로 종료됩니다.

그렇다면 이 작업을 수행할 때 다음은 왜 1을 제공합니까 echo $??

#!/bin/bash  
echo "two">file.txt  
ARRAY=(one three two)  
rc=0  
for i in ${ARRAY[@]}; do  
    echo "grepping $i "  
    grep "$i" file.txt || rc=$?  
done  
exit $rc  

마지막 명령은 grep에 대한 것이기 때문에 성공합니다 two.
출력은 다음과 같습니다

grepping one 
grepping three   
grepping two   
two  
~$ echo $?  
1  

나는 0을 기대했다. 루프의 명령이 실패하면 rc를 1로 설정하는 것이 제가 정말로 원하는 것입니다. 하지만 이 경우 왜 이런 일이 발생하는지 이해하고 싶습니다.

답변1

마지막 명령은 성공할 수 있지만 실패한 종료 상태만 grep에 저장합니다 rc. 따라서 트리가 grep실패하면 스크립트는 0이 아닌 종료 상태로 종료됩니다.

관련 정보