循环中的最后一个命令成功,但退出状态为 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是 for two
输出是:

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

我期望 0。注意,如果循环中的任何命令失败,则将 rc 设为 1 是我真正想要的。但我想了解为什么在这种情况下会发生这种情况

答案1

最后一个命令可能会成功,但您只将失败的退出状态保存greprc.因此,如果任何一棵树grep失败,您的脚本将以非零退出状态退出。

相关内容