Ответы:
$?
расширяется до состояния выхода последнего выполненного переднего конвейера. См. Раздел « Специальные параметры» руководства по Bash .
Проще говоря, это статус выхода последней команды.
Ответ Cjm верен, но $?
может использоваться глупыми способами в сценариях оболочки, и я хотел бы предостеречь против этого. Многие плохие сценарии оболочки имеют повторяющийся шаблон кода:
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
и т. д.) представляют параметры в сценарии оболочки.