Ich habe den Code irgendwo online geschrieben und wollte wissen, was genau "$?" tun/gib uns . Googeln hat nicht geholfen.
Hier ist der Code, in dem ich ihn gesehen habe:
#!/bin/sh
ping -c 2 localhost
if [ $? != 0 ] ; then
echo "Couldn't ping localhost, weird"
fi
ping -c 2 veryweirdhostname.noend
if [ $? != 0 ] ; then
echo "Surprise, Couldn't ping a very weird hostname.."
fi
echo "The pid of this process is $$"
Entnommen aus: http://efod.se/writings/linuxbook/html/Shell-scripts.html
$?
ist eine Variable, die den Rückgabewert des zuletzt ausgeführten Befehls enthält.
Beispiel C Programm (example.c
):
int main() { return 1; }
Beispiel Bash:
gcc -o example example.c
./example
echo $? # prints 1
Den meisten Antworten fehlt etwas Detail. Eine definitive Antwort finden Sie im POSIX-Standard für die Shell, im Abschnitt über spezielle Parameter :
$? Erweitert auf den Dezimal-Exit-Status der neuesten Pipeline (siehe Pipelines).
Lassen Sie sich nicht von Word pipeline überraschen, denn selbst ein einfacher Befehl wie ls
ist eine aus einem einzigen Befehl bestehende Pipeline. Aber was ist $?
für eine Pipeline mit mehreren Befehlen? Dies ist der Beendigungsstatus des Befehls last in der Pipeline.
Und was ist mit Pipelines, die im Hintergrund ausgeführt werden, wie grep foo bigfile|head -n 10 > result &
?
Ihr Exit-Status kann über wait
abgerufen werden, wenn der letzte Befehl der Pipeline abgeschlossen ist .. _ Die Hintergrundprozess-PID ist als $!
verfügbar, und $?
meldet nur, ob der Hintergrundbefehl korrekt started war.
Ein weiteres erwähnenswertes Detail ist, dass der Exit-Status normalerweise im Bereich von 0 bis 255 liegt, wobei 128 bis 255 angeben, dass der Prozess aufgrund eines Signals beendet wurde. Die Rückgabe anderer Werte aus einem C-Programm wird in $?
wahrscheinlich nicht genau wiedergegeben.
Es ist der Rückkehrcode des zuletzt ausgeführten Befehls.
Nach der Konvention ist 0 ein erfolgreicher Abbruch, und eine Nicht-Null weist auf eine Art Fehler hin.
Diese spezielle Variable zeigt den Beendigungsstatus des letzten Befehls an, der in einem Skript oder einer Befehlszeile ausgeführt wurde. In einer Befehlszeile könnte der Benutzer beispielsweise eingeben
who; echo $?
Die Ausgabe wäre dann
user tty7 2014-07-13 19:47
0
Dies zeigt die Ausgabe von who und den Beendigungsstatus des Befehls. Ein Skript wäre dasselbe.
#!/bin/bash
who
echo $?
Ausgabe: 0
die anderen Antworten decken ziemlich gut Bash ab, aber Sie geben in Ihrer Frage keine Shell an. In csh (und tcsh) kann $?
verwendet werden, um Abfrage der Existenz von Variablen , z.
if $?my_var then
echo my_var exists
endif