При просмотре одного сценария оболочки я увидел термин «$?». Каково значение этого термина?
linux
shell-script
Renjith G
источник
источник
Ответы:
$?
расширяется до состояния выхода последнего выполненного переднего конвейера. См. Раздел « Специальные параметры» руководства по Bash .Проще говоря, это статус выхода последней команды.
источник
Ответ Cjm верен, но
$?
может использоваться глупыми способами в сценариях оболочки, и я хотел бы предостеречь против этого. Многие плохие сценарии оболочки имеют повторяющийся шаблон кода:Если это вообще возможно (проблемы с читаемостью иногда мешают), вы должны кодировать эту ситуацию по-другому:
Это последнее использование быстрее, не загрязняет пространство имен переменных оболочки тем, что составляет временные переменные, часто может быть намного более читабельным для людей и поощряет использование «позитивной логики», практики написания условных выражений без отрицаний, которая имеет когнитивный характер. простота в большинстве ситуаций. Это устраняет с использованием
$?
по большей части.источник
В дополнение к тому, что сказал cjm , если значение
$?
равно 0, то предыдущий процесс завершился нормально (или успешно). В противном случае произошла какая-то ошибка.источник
diff
выходит с 0, если сравниваемые файлы одинаковы, с 1, если они разные, и 2 - ошибка.$?
-Выход из последней выполненной команды.$0
Имя файла текущего скрипта.$#
Количество аргументов, предоставленных сценарию.$$
Номер процесса текущей оболочки. Для сценариев оболочки это идентификатор процесса, под которым они выполняются.источник
$? предоставьте нам статус выполнения последней команды на выполнение. Значение «0» означает, что команда была выполнена успешно, а «1» не для успеха.
источник
$?
определяет статус выхода выполненной команды.$
цифры (например$1
,$2
и т. д.) представляют параметры в сценарии оболочки.источник