it-swarm-ru.tech

В чем смысл $? в сценарии оболочки?

При прохождении одного сценария Shell я увидел термин "$?". Каково значение этого термина?

37
Renjith G

$? расширяется до состояния выхода последнего выполненного переднего конвейера. Смотрите раздел "Специальные параметры" руководства по Bash .

Проще говоря, это статус выхода последней команды.

43
cjm

ответ Cjm правильно, но $? может использоваться глупыми способами в сценариях Shell, и я хотел бы предостеречь против этого. Многие плохие сценарии оболочки имеют повторяющийся шаблон кода:

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

Последнее использование более быстрое, не загрязняет пространство имен переменных оболочки с тем, что составляет временные переменные, часто может быть намного более читабельным для людей и поощряет использование "позитивной логики", практики написания условных выражений без отрицаний, которая имеет когнитивный характер. простота в большинстве ситуаций. Это устраняет использование $? по большей части.

26
Bruce Ediger

В дополнение к тому, что сказал CJM , если значение $? равно 0, тогда предыдущий процесс завершился нормально (или успешно). В противном случае произошла какая-то ошибка.

3
Barun

$?- Статус выхода последней выполненной команды.

$0- Имя файла текущего скрипта.

$#- Количество аргументов, предоставленных скрипту.

$$- Номер процесса текущей оболочки. Для сценариев оболочки это идентификатор процесса, под которым они выполняются.

3
Midhun S Sivan

$? предоставьте нам статус выполнения последней команды на выполнение. Значение "0" означает, что команда была выполнена успешно, а "1" не для успеха.

0
Rahul Arora