Da man bash
:
$? Si espande allo stato di uscita della pipeline in primo piano eseguita più di recente.
echo $?
restituirà lo stato di uscita dell'ultimo comando. Hai ottenuto 127
questo è lo stato di uscita dell'ultimo comando eseguito terminato con qualche errore (molto probabilmente). I comandi in caso di completamento riuscito escono con uno stato di uscita di 0
(molto probabilmente). L'ultimo comando ha dato come output 0
dal echo $v
sulla riga precedente terminato senza errori.
Se esegui i comandi
v=4
echo $v
echo $?
Otterrai un output come:
4 (from echo $v)
0 (from echo $?)
Prova anche:
true
echo $?
Otterrai 0
.
false
echo $?
Otterrai 1
.
L'true
command non fa nulla, termina solo con un codice di stato 0
; e il false
Anche il comando non fa nulla, esce semplicemente con un codice di stato che indica un errore (cioè con il codice di stato 1
).
$?
è utile negli shellscript come modo per decidere cosa fare a seconda di come ha funzionato il comando precedente (controllando lo stato di uscita). Possiamo aspettarci che lo stato di uscita sia 0
quando il comando precedente ha funzionato (è terminato con successo), altrimenti un valore numerico diverso da zero.
Esempio dimostrativo:
#!/bin/bash
patience=3
read -t "$patience" -p "Press 'Enter' if you run Unix or Linux, otherwise press 'ctrl+d' "
status="$?"
if [[ $status -eq 0 ]]
then
echo "That's great :-)"
elif [[ $status -eq 1 ]]
then
echo "(exit status=$status)
You are welcome to try Unix or Linux :-)"
else
echo "(exit status=$status)
You did not answer within $patience seconds. Anyway :-)"
fi
echo "'Unix & Linux' is a question/answer web site for
Unix and Linux operating systems"
Potresti chiedere come eseguire uno shellscript bash senza Unix o Linux;-)