もしそうなら、これを行うとき、次はなぜ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
失敗すると、スクリプトはゼロ以外の終了状態で終了します。