Risposte:
$?si espande allo stato di uscita dell'ultima pipeline in primo piano eseguita. Vedi la sezione Parametri speciali del manuale di Bash .
In termini più semplici, è lo stato di uscita dell'ultimo comando.
La risposta di Cjm è corretta, ma $?può essere usata in modo sciocco negli script di shell, e vorrei metterti in guardia. Molti script di shell non validi hanno un modello ripetuto di codice:
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
Se possibile (problemi di leggibilità a volte intrusi), dovresti codificare questa situazione in modo diverso:
if run_some_command
then
# Do work when command exists on success
else
# Do failure exit work
fi
Quest'ultimo utilizzo è più veloce, non contamina lo spazio dei nomi delle variabili della shell con ciò che equivale a variabili temporanee, spesso può essere molto più leggibile per l'uomo e incoraggia l'uso della "logica positiva", la pratica di scrivere condizionali senza negazioni, che ha cognizioni semplicità nella maggior parte delle situazioni. Elimina $?gran parte dell'uso di .
Oltre a quanto detto da cjm , se il valore di $?è 0, il processo precedente è terminato normalmente (o correttamente). Altrimenti si è verificato un errore.
diffesce con uno 0 se i file confrontati sono uguali, con uno se sono diversi e 2 è un errore.
$?-Lo stato di uscita dell'ultimo comando eseguito.
$0-Il nome del file dello script corrente.
$#-Il numero di argomenti forniti a uno script.
$$-Il numero di processo della shell corrente. Per gli script di shell, questo è l'ID del processo con cui vengono eseguiti.
$? forniscici lo stato di esecuzione dell'ultimo comando di esecuzione al prompt. Il valore '0' indica che il comando è stato eseguito correttamente e '1' non è riuscito.
$?determina lo stato di uscita del comando eseguito. $seguito da numeri (ad es $1. $2, ecc.) rappresenta i parametri nello script della shell.