Che cos'è '$?' ? È una variabile?

21

La domanda è abbastanza semplice. Posso ottenere il codice di uscita del comando precedente utilizzando $? . Ma cos'è esattamente?

Non penso che sia una variabile, perché non puoi avere caratteri speciali nel nome di una variabile diversa da _ .

foo?foo=10

genererà l'errore: foo?foo=10: command not found

Quindi, se non è una variabile, che cos'è? Ce ne sono altri?

    
posta daltonfury42 09.07.2015 - 20:24
fonte

4 risposte

20

Che cos'è?

$? è una variabile integrata che memorizza lo stato di uscita di un comando, funzione o lo script stesso.

$? legge lo stato di uscita dell'ultimo comando eseguito. Dopo il ritorno di una funzione, $? fornisce lo stato di uscita dell'ultimo comando eseguito nella funzione. Questo è il modo in cui Bash dà alle funzioni un "valore di ritorno". Restituisce 0 in caso di successo o un intero nell'intervallo 1 - 255 in caso di errore.

Ci sono altri come loro?

Sì, ci sono diverse variabili incorporate in bash. Puoi visualizzare un elenco qui . Fare riferimento:   link

    
risposta data Ron 09.07.2015 - 20:36
fonte
22

$? è una variabile ma speciale, ecco perché sono consentiti caratteri speciali. ($?) Si espande allo stato di uscita della pipeline in primo piano eseguita più recentemente.

Non è l'unico, la shell tratta in modo specifico alcuni parametri. Questi parametri possono essere referenziati; l'assegnazione a loro non è consentita:

Variable    Meaning
$0          Filename of script
$1          Positional parameter #1
$2 - $9     Positional parameters #2 - #9
${10}       Positional parameter #10
$#          Number of positional parameters
"$*"        All the positional parameters (as a single word) *
"$@"        All the positional parameters (as separate strings)
${#*}       Number of positional parameters
${#@}       Number of positional parameters
$?          Return value
$$          Process ID (PID) of script
$-          Flags passed to script (using set)
$_          Last argument of previous command
$!          Process ID (PID) of last job run in background

* Must be quoted, otherwise it defaults to $@.

Fonti:

risposta data Sylvain Pineau 09.07.2015 - 20:37
fonte
6

$? è un parametro speciale della shell (variabile).

In generale, tutte le variabili definite dall'utente devono essere denominate utilizzando solo i caratteri della classe di caratteri [:alnum:] i.e. [a-zA-Z0-9_] (inoltre, non può iniziare con [0-9] ).

In poche parole, $? è una variabile speciale ( e ce ne sono alcuni ) che può essere considerato come caratteristica interna della shell stessa che fornisce il codice di uscita del comando precedente (se riuscito o non riuscito).

Puoi leggere questo per avere più idea sulle variabili.

    
risposta data heemayl 09.07.2015 - 20:40
fonte
4

$? è una variabile speciale in bash che contiene sempre il codice di ritorno / uscita dell'ultimo comando eseguito.

Puoi visualizzarlo in un terminale eseguendo echo $? .

I codici di ritorno sono compresi nell'intervallo [0; 255].
Un codice di ritorno di 0 di solito significa che tutto è ok.
Altri valori indicano errori. La maggior parte delle applicazioni restituisce 1 o valori personalizzati. Se non è stato trovato un comando, la variabile di solito contiene 127

Se vuoi impostare questa variabile su un valore specifico, puoi farlo facilmente con bash -c "exit 5" per restituire ad esempio il codice di ritorno 5 .

    
risposta data Byte Commander 09.07.2015 - 20:36
fonte

Leggi altre domande sui tag