O último comando em um loop é bem-sucedido, mas o status de saída é 1

0

Então, por que o seguinte dá 1 quando eu faço 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  

O último comando é bem-sucedido, pois grep s para two .
A saída é:

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

Eu esperava 0. Note recebendo rc como 1 se qualquer comando no loop falhar é o que eu realmente quero. Mas eu quero entender porque isso está acontecendo neste caso

    
por Jim 11.10.2017 / 11:23

1 resposta

2

O último comando pode ser bem-sucedido, mas você só salva os status de saída da falha grep s em rc . Portanto, se alguma das árvores grep s falhar, seu script sairá com um status de saída diferente de zero.

    
por 11.10.2017 / 11:29