it-swarm.com.de

Was bedeutet $? in einem Shell-Skript?

Beim Durchlaufen eines Shell-Skripts wurde der Begriff "$?" Welche Bedeutung hat dieser Begriff?

37
Renjith G

$? wird auf den Exit-Status der zuletzt ausgeführten Vordergrund-Pipeline erweitert. Siehe Abschnitt Spezielle Parameter im Bash-Handbuch .

Einfacher ausgedrückt ist dies der Exit-Status des letzten Befehls.

43
cjm

Cjms Antwort ist richtig, aber $? kann auf dumme Weise in Shell-Skripten verwendet werden, und ich möchte davor warnen. Viele schlechte Shell-Skripte haben ein wiederholtes Codemuster:

run_some_command
EXIT_STATUS=$?

if [ "$EXIT_STATUS" -eq "0" ]
then
    # Do work when command exists on success
else
    # Do work for when command has a failure exit
fi

Wenn möglich (Lesbarkeitsprobleme stören manchmal), sollten Sie diese Situation anders codieren:

if run_some_command
then
    # Do work when command exists on success
else
    # Do failure exit work
fi

Diese letztere Verwendung ist schneller, kontaminiert den Variablennamensraum der Shell nicht mit temporären Variablen, kann für Menschen oft viel besser lesbar sein und fördert die Verwendung von "positiver Logik", der Praxis des Schreibens von Bedingungen ohne Negationen, die kognitiv ist Einfachheit in den meisten Situationen. Es macht die Verwendung von $? hauptsächlich.

26
Bruce Ediger

Zusätzlich zu dem, was cjm sagte , wenn der Wert von $? ist 0, dann wurde der vorherige Prozess normal (oder erfolgreich) beendet. Ansonsten ist ein Fehler aufgetreten.

3
Barun

$?- Der Exit-Status des zuletzt ausgeführten Befehls.

$0- Der Dateiname des aktuellen Skripts.

$#- Die Anzahl der Argumente, die einem Skript übergeben werden.

$$- Die Prozessnummer der aktuellen Shell. Bei Shell-Skripten ist dies die Prozess-ID, unter der sie ausgeführt werden.

3
Midhun S Sivan

$? Geben Sie den Ausführungsstatus des letzten Ausführungsbefehls in der Eingabeaufforderung an. Der Wert '0' bedeutet, dass der Befehl erfolgreich ausgeführt wurde und '1' für keinen Erfolg steht.

0
Rahul Arora