Podczas przeglądania jednego skryptu powłoki widziałem termin „$?”. Jakie jest znaczenie tego terminu?
Podczas przeglądania jednego skryptu powłoki widziałem termin „$?”. Jakie jest znaczenie tego terminu?
Odpowiedzi:
$?
rozwija się do statusu wyjścia ostatnio wykonywanego potoku pierwszego planu. Zobacz sekcję Parametry specjalne w podręczniku Bash .
Mówiąc prościej, jest to status wyjścia ostatniego polecenia.
Odpowiedź Cjm jest poprawna, ale $?
może być używana w niemądry sposób w skryptach powłoki i chciałbym ostrzec przed tym. Wiele złych skryptów powłoki ma powtarzający się wzór kodu:
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
Jeśli to w ogóle możliwe (czasem dotyczy to czytelności), należy zakodować tę sytuację inaczej:
if run_some_command
then
# Do work when command exists on success
else
# Do failure exit work
fi
To ostatnie użycie jest szybsze, nie zanieczyszcza przestrzeni nazw zmiennych powłoki wielkościami zmiennymi temp, często może być o wiele bardziej czytelne dla ludzi i zachęca do stosowania „logiki pozytywnej”, praktyki pisania warunkowej bez negacji, która ma funkcje poznawcze prostota w większości sytuacji. W $?
większości eliminuje to użycie .
Oprócz tego, co powiedział cjm , jeśli wartość $?
wynosi 0, to poprzedni proces zakończył się normalnie (lub pomyślnie). W przeciwnym razie wystąpił błąd.
diff
kończy się z 0, jeśli porównywane pliki są takie same, z 1, jeśli są różne, a 2 oznacza błąd.
$?
-Status wyjścia ostatniego wykonanego polecenia.
$0
-Nazwa bieżącego skryptu.
$#
- Liczba argumentów dostarczonych do skryptu.
$$
-Numer procesu bieżącej powłoki. W przypadku skryptów powłoki jest to identyfikator procesu, w ramach którego są one wykonywane.
$? podaj nam status wykonania ostatniego polecenia wykonania po znaku zachęty. Wartość „0” oznacza, że polecenie zostało wykonane pomyślnie, a „1” oznacza brak powodzenia.
$?
określa status wyjścia wykonanego polecenia. $
następnie liczby (na przykład $1
, $2
itp) przedstawia parametry w skrypcie.