Что такое '$?'? Действительно ли это - переменная?

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

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

foo?foo=10

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

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

23
задан 10 July 2015 в 04:48

4 ответа

, Что это?

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

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

там другие как он также?

Да, в ударе существуют несколько таких встроенных переменных. Вы видите список здесь . Относитесь: http://www.tldp.org/LDP/abs/html/exit-status.html

23
ответ дан 23 November 2019 в 01:25

$? особенные параметр оболочки (переменная).

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

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

Вы можете читать это для получения большей идеи о переменных.

6
ответ дан 23 November 2019 в 01:25

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

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

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

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

4
ответ дан 23 November 2019 в 01:25

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

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

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 $@.

Источники:

22
ответ дан 23 November 2019 в 01:25

Другие вопросы по тегам:

Похожие вопросы: