it-swarm.it

Qual è il significato di $? in uno script Shell?

Quando ho passato uno script Shell, ho visto il termine "$?". Qual è il significato di questo termine?

37
Renjith G

$? si espande allo stato di uscita dell'ultima pipeline in primo piano eseguita. Vedi sezione Parametri speciali del manuale di Bash .

In termini più semplici, è lo stato di uscita dell'ultimo comando.

43
cjm

la risposta di Cjm è corretta, ma $? può essere usato in modo sciocco negli script Shell, e mi piacerebbe metterlo in guardia. Molti script 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 di 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 semplicità nella maggior parte delle situazioni. Elimina l'uso di $? per la maggior parte.

26
Bruce Ediger

Oltre a ciò cjm detto , se il valore di $? è 0, quindi il processo precedente è terminato normalmente (o correttamente). Altrimenti si è verificato un errore.

3
Barun

$?- Lo stato di uscita dell'ultimo comando eseguito.

$0- Il nome file dello script corrente.

$#- Il numero di argomenti forniti a uno script.

$$- Il numero di processo della Shell corrente. Per gli script Shell, questo è l'ID del processo con cui vengono eseguiti.

3
Midhun S Sivan

$? forniscici lo stato di esecuzione dell'ultimo comando di esecuzione sul prompt. Il valore '0' indica che il comando è stato eseguito correttamente e '1' non è riuscito.

0
Rahul Arora