Значение $? в скриптах оболочки - PullRequest
132 голосов
/ 30 августа 2011

Что означает

echo $?

в программировании Bash?

Ответы [ 7 ]

159 голосов
/ 30 августа 2011

Это статус выхода последней выполненной команды.

Например, команда true всегда возвращает состояние 0, а false всегда возвращает состояние 1:

true
echo $? # echoes 0
false
echo $? # echoes 1

Из руководства: (доступно через вызов man bash в вашей оболочке)

$? Расширяется до состояния выхода последнего выполненного переднего плана конвейера.

По соглашению статус выхода 0 означает успех, а ненулевой статус возврата означает сбой. Подробнее о статусах выхода в википедии .

Существуют и другие специальные переменные, подобные этой, как вы можете видеть в этом онлайн-руководстве: https://www.gnu.org/s/bash/manual/bash.html#Special-Parameters

15 голосов
/ 16 декабря 2014

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

Следовательно при написании сценариев; Я склонен использовать следующий синтаксис

if [ $? -eq 0 ]; then
 # do something
else
 # do something else
fi

Сравнение должно быть сделано на равных 0 или не равных 0.

** Обновление На основе комментария: в идеале не следует использовать вышеуказанный блок кода для сравнения, см. Комментарии и пояснения @tripleee.

6 голосов
/ 30 августа 2011

Последний код состояния (значение выхода) команды.

5 голосов
/ 19 октября 2017

echo $? - Предоставляет СТАТУС ВЫХОДА самой последней выполненной команды .Это СОСТОЯНИЕ ВЫХОДА, скорее всего, будет числом с НУЛЕМ, подразумевающим Успех и любым НЕУКАЗАТЕЛЬНЫМ значением, указывающим Сбой

? - это один специальный параметр / переменная в bash.

$? - он дает значение, хранящееся в переменной "?".

Некоторые похожие специальные параметрыв BASH - 1,2, *, # (обычно в команде echo обозначаются как $ 1, $ 2, $ *, $ # и т. д.).

2 голосов
/ 30 августа 2011

С http://www.gnu.org/s/bash/manual/bash.html#Special-Parameters

?
Expands to the exit status of the most recently executed foreground pipeline. 
1 голос
/ 17 марта 2013

Выводит результат последней выполненной команды unix

0 implies true
1 implies false
1 голос
/ 30 августа 2011

См. Руководство по Bash в разделе 3.4.2 Специальные параметры :

? - Расширение до состояния выхода последнего выполненного переднего конвейера.

Это немного сложно найти, потому что он не указан как $? (имя переменной «просто» ?). Также смотрите раздел статус выхода , конечно; -)

Удачного кодирования.

...