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;-)