Відповіді:
$?
розширюється до статусу виходу останнього виконаного переднього плану трубопроводу. Дивіться розділ " Спеціальні параметри" в посібнику Bash .
Простіше кажучи, це статус виходу останньої команди.
Відповідь Кіма правильна, але $?
її можна використовувати дурними способами в сценаріях оболонок, і я хотів би застерегти від цього. Багато поганих сценаріїв оболонки мають повторний зразок коду:
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
Якщо це взагалі можливо (проблеми читабельності іноді втручаються), ви повинні кодувати цю ситуацію інакше:
if run_some_command
then
# Do work when command exists on success
else
# Do failure exit work
fi
Це останнє використання швидше, не забруднює змінний простір імен оболонки тим, що дорівнює тимчасовим змінним, часто може бути набагато зрозумілішим для людей і заохочує використання "позитивної логіки", практики написання умовних умов без заперечень, що має пізнавальний характер простота в більшості ситуацій. Це позбавляється від використання $?
здебільшого.
На додаток до сказаного cjm , якщо значення $?
дорівнює 0, попередній процес закінчувався нормально (або успішно). Інакше виникла помилка.
diff
виходить з 0, якщо порівняні файли однакові, з 1, якщо вони різні, і 2 - помилка.
$?
-Стату виходу останньої виконаної команди.
$0
-Ім’я поточного сценарію.
$#
-Кількість аргументів, поданих до сценарію.
$$
-Номер процесу поточної оболонки. Для скриптів оболонок це ідентифікатор процесу, під яким вони виконуються.
$? надайте нам статус виконання останньої команди виконувати під час запиту. Значення "0" позначає, що команда була виконана успішно, а "1" - не для успіху.
$?
визначає стан виходу виконаної команди. $
Далі цифри (наприклад $1
, $2
тощо) представляють параметри сценарію оболонки.