Pytanie jest dość proste. Mogę uzyskać kod wyjścia poprzedniego polecenia za pomocą $?
. Ale co to właściwie jest?
Nie sądzę, ż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 nie jest to zmienna, co to jest? Czy są tacy inni?
command-line
bash
daltonfury42
źródło
źródło
Odpowiedzi:
Co to jest?
$?
jest wbudowaną zmienną, która przechowuje 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. W ten sposób Bash nadaje funkcjom „wartość zwracaną”. Zwraca0
w przypadku sukcesu lub liczbę całkowitą w zakresie1 - 255
w przypadku błędu.Czy są też tacy inni?
Tak, istnieje kilka takich wbudowanych zmiennych w bash. Możesz zobaczyć listę tutaj . Patrz: http://www.tldp.org/LDP/abs/html/exit-status.html
źródło
dash
,ksh
,zsh
, między innymi).$status
do tego samego celu$?
jest zmienną, ale specjalną, dlatego znaki specjalne są dozwolone.($?)
Rozwija się do statusu wyjścia ostatnio wykonanego potoku pierwszego planu.Nie jest to jedyny, powłoka specjalnie traktuje kilka parametrów. Do tych parametrów można się jedynie odwoływać; przypisanie do nich jest niedozwolone:
Źródła:
źródło
"$*"
to nie tylko wszystkie parametry pozycyjne jako pojedyncze słowo, ale wszystkie parametry pozycyjne oddzielone pierwszym znakiemIFS
jako pojedyncze słowo. Ponieważ wynik nie będzie cytowany, będzie podlegał podziałowi pola, więc efekt jest taki, jak$@
w przypadku niecytowanym.$?
to specjalny parametr powłoki (zmienny).Zasadniczo wszystkie zmienne zdefiniowane przez użytkownika muszą być nazwane przy użyciu tylko znaków z klasy znaków
[:alnum:]
tj.[a-zA-Z0-9_]
(Także nie można zaczynać od[0-9]
).Krótko mówiąc,
$?
jest to specjalna zmienna ( a jest ich całkiem sporo ), którą można uznać za wewnętrzną cechę samej powłoki, która zapewnia kod wyjściowy poprzedniej komendy (czy się to powiodło, czy nie).Możesz to przeczytać, aby uzyskać więcej informacji na temat zmiennych.
źródło
$?
jest specjalną zmienną w bash, która zawsze przechowuje kod powrotu / wyjścia ostatnio wykonanej komendy.Możesz go wyświetlić w terminalu, uruchamiając
echo $?
.Kody zwrotne są w zakresie [0; 255].
Kod powrotu
0
zwykle oznacza, że wszystko jest w porządku.Inne wartości wskazują na błędy. Większość aplikacji zwraca
1
lub wartości niestandardowe. Jeśli polecenie nie zostanie znalezione, zmienna zwykle zawiera127
Jeśli chcesz ustawić tę zmienną na określoną wartość, możesz to łatwo zrobić za pomocą,
bash -c "exit 5"
aby na przykład zwrócić kod powrotu5
.źródło
setstatus() { return 5; }