O que é '$?' ? É uma variável?

21

A questão é bem direta. Eu posso obter o código de saída do comando anterior usando $? . Mas o que exatamente é isso?

Eu não acho que seja uma variável, porque você não pode ter nenhum caractere especial no nome da variável diferente de _ .

foo?foo=10

resultará no erro: foo?foo=10: command not found

Então, se não é uma variável, o que é isso? Existem outros assim?

    
por daltonfury42 09.07.2015 / 20:24

4 respostas

20

O que é isso?

$? é uma variável incorporada que armazena o status de saída de um comando, função ou o próprio script.

$? lê o status de saída do último comando executado. Depois que uma função retorna, $? fornece o status de saída do último comando executado na função. Esta é a maneira de Bash dar às funções um "valor de retorno". Ele retorna 0 no sucesso ou um inteiro no intervalo 1 - 255 no erro.

Existem outras também?

Sim, existem várias variáveis internas no bash. Você pode ver uma lista aqui . Referir:   link

    
por Ron 09.07.2015 / 20:36
22

$? é uma variável, mas especial, é por isso que caracteres especiais são permitidos. ($?) Expande para o status de saída do pipeline de primeiro plano executado mais recentemente.

Não é o único, o shell trata vários parâmetros especialmente. Esses parâmetros só podem ser referenciados; atribuição a eles não é permitida:

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

Fontes:

por Sylvain Pineau 09.07.2015 / 20:37
6

$? é um parâmetro de shell especial (variável).

Em geral, todas as variáveis definidas pelo usuário devem ser nomeadas usando apenas os caracteres da classe de caractere [:alnum:] , ou seja, [a-zA-Z0-9_] (também não é possível começar com [0-9] ).

Em suma, $? é uma variável especial ( e há alguns deles ) que pode ser considerado como recurso interno do próprio shell que fornece o código de saída do comando anterior (se bem sucedido ou malsucedido).

Você pode ler isto para ter mais ideias sobre as variáveis.

    
por heemayl 09.07.2015 / 20:40
4

$? é uma variável especial no bash que sempre mantém o código de retorno / saída do último comando executado.

Você pode visualizá-lo em um terminal executando echo $? .

Os códigos de retorno estão no intervalo [0; 255].
Um código de retorno de 0 geralmente significa que tudo está bem.
Outros valores indicam erros. A maioria dos aplicativos retorna 1 ou valores personalizados. Se um comando não foi encontrado, a variável geralmente contém 127

Se você quiser definir essa variável com um valor específico, poderá fazer isso facilmente com bash -c "exit 5" para retornar, por exemplo, o código de retorno 5 .

    
por Byte Commander 09.07.2015 / 20:36