Qual é o significado de $? em um script de shell?

27

Ao passar por um script de shell, vi o termo "$?". Qual é o significado deste termo?

    
por Renjith G 20.02.2011 / 12:43

6 respostas

37

$? expande para o status de saída do pipeline de primeiro plano executado mais recentemente. Consulte a seção Parâmetros especiais do manual do Bash .

Em termos mais simples, é o status de saída do último comando.

    
por 20.02.2011 / 12:50
22

resposta do Cjm está correto, mas $? pode ser usado de maneira tola em scripts de shell, e eu gostaria de alertar contra isso. Muitos scripts de shell ruins possuem um padrão repetido de código:

run_some_command
EXIT_STATUS=$?

if [ "$EXIT_STATUS" -eq "0" ]
then
    # Do work when command exists on success
else
    # Do work for when command has a failure exit
fi

Se possível (questões de legibilidade às vezes se intrometem), você deve codificar essa situação de maneira diferente:

if run_some_command
then
    # Do work when command exists on success
else
    # Do failure exit work
fi

Este último uso é mais rápido, não contamina o namespace de variável do shell com o que equivale a variáveis temporárias, pode ser muito mais legível para humanos e encoraja o uso de "lógica positiva", a prática de escrever condicionais sem negações, que tem simplicidade cognitiva na maioria das situações. Isso acaba com o uso de $? na maior parte.

    
por 20.02.2011 / 16:41
3

Além do que cjm dito , se o valor de $? for 0, o processo anterior terminou normalmente (ou com sucesso). Caso contrário, houve algum erro.

    
por 20.02.2011 / 14:48
1

$? -O status de saída do último comando executado.

$0 -O nome do arquivo do script atual.

$# -O número de argumentos fornecidos para um script.

$$ -O número do processo do shell atual. Para scripts de shell, esse é o ID do processo sob o qual eles estão sendo executados.

    
por 07.07.2017 / 11:21
0

$? nos fornecer o status de execução do último comando execute no prompt. O valor '0' denota que o comando foi executado com sucesso e '1' por não ter sucesso.

    
por 25.04.2018 / 13:25
-3

$? determina o status de saída do comando executado. $ seguido por números (por exemplo, $1 , $2 , etc.) representa os parâmetros no script de shell.

    
por 01.09.2012 / 13:56