it-roy-ru.com

Значение $? в сценариях оболочки

Что значит

echo $?

значит в программировании bash?

129
Harshay Buradkar

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

Например, команда 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

155
Arnaud Le Blanc

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

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

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

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

14
Saurabh Ariyan

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

6
Ned Batchelder

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

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

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

Некоторые аналогичные специальные параметры в BASH: 1,2, *, # (обычно в команде echo видны как $ 1, $ 2, $ *, $ # и т.д.,).

5
Arun Karthik

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

?
Expands to the exit status of the most recently executed foreground pipeline. 
2
evil otto

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

0 implies true
1 implies false
1
Sojourner

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

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

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

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

1
user166390