ループの最後のコマンドは成功しましたが、状態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失敗すると、スクリプトはゼロ以外の終了状態で終了します。

おすすめ記事