Letzter Befehl in einer Schleife ist erfolgreich, aber der Beendigungsstatus ist 1


0

Warum gibt das Folgende 1, wenn ich es tue 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  

Der letzte Befehl ist erfolgreich, da es grepfür ist two.
Die Ausgabe ist:

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

Ich habe mit 0 gerechnet. Beachten Sie, dass ich rc als 1 erhalten möchte, wenn ein Befehl in der Schleife fehlschlägt. Aber ich möchte verstehen, warum dies in diesem Fall geschieht

Antworten:


2

Der letzte Befehl ist möglicherweise erfolgreich, aber Sie speichern nur den Exit-Status von fehlgeschlagenen greps to rc. Wenn also einer der Bäume grepausfällt, wird Ihr Skript mit einem Beendigungsstatus ungleich Null beendet.


Ah, perfekt, das ist was ich brauche.
— Jim

@ Jim gut! Wenn dies Ihr Problem löst, ziehen Sie bitte in Betracht , die Antwort zu akzeptieren .
— Kusalananda

Würde set -eauch das erreichen, wonach ich suche?
— Jim

@Jim Using set -ewürde das Skript beenden, sobald der erste grepnichts findet. Wenn du das willst, dann ok.
— Kusalananda

Ich möchte das aber auch eine Fehlermeldung ausgeben, um den Grund zu zeigen
— Jim
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.