Что такое «$?»? ? Это переменная?

21

Вопрос довольно прямолинейный. Я могу получить код выхода предыдущей команды, используя $? . Но что это такое?

Я не думаю, что это переменная, потому что вы не можете иметь никаких специальных символов в имени переменной, отличной от _ .

foo?foo=10

приведет к ошибке: foo?foo=10: command not found

Итак, если это не переменная, что это такое? Есть ли другие подобные?

    
задан daltonfury42 09.07.2015 в 20:24
источник

4 ответа

20

Что это такое?

$? - встроенная переменная, которая сохраняет статус выхода команды, функции или самого скрипта.

$? считывает статус выхода последней выполненной команды. После возврата функции $? дает статус выхода последней команды, выполняемой в функции. Это способ Баша давать функции «возвращаемое значение». Он возвращает 0 при успехе или целое число в диапазоне 1 - 255 при ошибке.

Есть и другие подобные?

Да, в bash есть несколько таких встроенных переменных. Вы можете увидеть список здесь . См:   Ссылка

    
ответ дан Ron 09.07.2015 в 20:36
источник
22

$? - это переменная, но специальная, поэтому допускаются специальные символы. ($?) Расширяется до статуса выхода последнего выполненного переднего плана.

Это не единственное, оболочка рассматривает несколько параметров специально. К этим параметрам можно отнести только ссылки; присвоение им не разрешено:

Variable    Meaning
$0          Filename of script
$1          Positional parameter #1
$2 - $9     Positional parameters #2 - #9
${10}       Positional parameter #10
$#          Number of positional parameters
"$*"        All the positional parameters (as a single word) *
"$@"        All the positional parameters (as separate strings)
${#*}       Number of positional parameters
${#@}       Number of positional parameters
$?          Return value
$$          Process ID (PID) of script
$-          Flags passed to script (using set)
$_          Last argument of previous command
$!          Process ID (PID) of last job run in background

* Must be quoted, otherwise it defaults to $@.

Источники:

ответ дан Sylvain Pineau 09.07.2015 в 20:37
6

$? - параметр специальный (переменная).

В общем, все пользовательские переменные должны быть названы с использованием только символов из класса символов [:alnum:] i.e. [a-zA-Z0-9_] (также не может начинаться с [0-9] ).

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

Вы можете прочитать это , чтобы получить больше информации о переменных.

    
ответ дан heemayl 09.07.2015 в 20:40
4

$? - специальная переменная в bash, которая всегда содержит код возврата / выхода последней выполненной команды.

Вы можете просмотреть его в терминале, запустив echo $? .

Коды возврата находятся в диапазоне [0; 255].
Код возврата 0 обычно означает, что все в порядке.
Другие значения указывают на ошибки. Большинство приложений возвращают 1 или пользовательские значения. Если команда не найдена, переменная обычно содержит 127

Если вы хотите установить эту переменную в определенное значение, вы можете легко сделать это с помощью bash -c "exit 5" , чтобы вернуть, например, код возврата 5 .

    
ответ дан Byte Commander 09.07.2015 в 20:36