Co to jest "$?" ? Czy to jest zmienna?

21

Pytanie jest całkiem proste. Mogę uzyskać kod zakończenia poprzedniego polecenia, używając $? . Ale co to właściwie jest?

Nie uważam, że jest to zmienna, ponieważ nie możesz mieć żadnych znaków specjalnych w nazwie zmiennej innej niż _ .

foo?foo=10

spowoduje błąd: foo?foo=10: command not found

Więc jeśli to nie jest zmienna, co to jest? Czy są inni tacy?

    
zadawane daltonfury42 09.07.2015, 20:24
źródło

4 odpowiedzi

20

Co to jest?

$? to wbudowana zmienna przechowująca status wyjścia polecenia, funkcji lub samego skryptu.

$? odczytuje status wyjścia ostatniego wykonanego polecenia. Po powrocie funkcji $? podaje status wyjścia ostatniego polecenia wykonanego w funkcji. To jest sposób, w jaki Bash nadaje funkcjom "wartość zwrotu". Zwraca 0 dla sukcesu lub liczbę całkowitą z zakresu 1 - 255 dla błędu.

Czy inni też to lubią?

Tak, jest kilka takich wbudowanych zmiennych w bashu. Możesz zobaczyć listę tutaj . Odnosić się:   link

    
odpowiedział Ron 09.07.2015, 20:36
źródło
22

$? jest zmienną, ale specjalną, dlatego dozwolone są znaki specjalne. ($?) Rozwija się do statusu wyjścia ostatnio wykonanego potokowego planu.

To nie jedyna, powłoka traktuje kilka parametrów specjalnie. Do tych parametrów można się odwoływać; przypisanie do nich jest niedozwolone:

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 $@.

Źródła:

odpowiedział Sylvain Pineau 09.07.2015, 20:37
źródło
6

$? jest specjalnym parametrem powłoki (zmienną).

W ogóle wszystkie zmienne zdefiniowane przez użytkownika musi być nazwany przy użyciu tylko znaki z klasy znaków [:alnum:] tj [a-zA-Z0-9_] (również nie może zaczynać [0-9] ).

W skrócie, $? to specjalna zmienna ( i istnieje sporo z nich ), które można uznać za wewnętrzną cechę samej powłoki, która dostarcza kod wyjścia poprzedniego polecenia (niezależnie od tego, czy powiodło się, czy nie).

można przeczytać aby uzyskać więcej pojęcia o zmiennych.

    
odpowiedział heemayl 09.07.2015, 20:40
źródło
4

$? to specjalna zmienna w bashu, która zawsze zawiera kod return / exit ostatniej wykonanej komendy.

Możesz wyświetlić go w terminalu, uruchamiając echo $? .

Kody powrotne są w zakresie [0; 255] Kod powrotu 0 zwykle oznacza, że wszystko jest ok.
Inne wartości wskazują na błędy. Większość aplikacji zwraca 1 lub wartości niestandardowe. Jeśli polecenie nie zostanie znalezione, zmienna zwykle zawiera 127

Jeśli chcesz ustawić tę zmienną na określoną wartość, możesz to łatwo zrobić za pomocą bash -c "exit 5" , aby zwrócić np. kod powrotu 5 .

    
odpowiedział Byte Commander 09.07.2015, 20:36
źródło

Przeczytaj inne pytania na temat tagów