그렇다면 이 작업을 수행할 때 다음은 왜 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이 아닌 종료 상태로 종료됩니다.