Respostas:
$?
expande para o status de saída do pipeline em 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.
A resposta de Cjm está correta, mas $?
pode ser usada de maneiras tolas em scripts de shell, e eu gostaria de alertar contra isso. Muitos scripts shell ruins têm 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 (preocupaçõ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 espaço de nomes de variáveis do shell com o que equivale a variáveis temporárias, geralmente pode ser muito mais legível para seres humanos e incentiva o uso de "lógica positiva", a prática de escrever condicionais sem negações, o que tem efeitos cognitivos. simplicidade na maioria das situações. Ele acaba com o uso de $?
na maior parte.
Além do que cjm disse , se o valor $?
for 0, o processo anterior foi encerrado normalmente (ou com êxito). Caso contrário, houve algum erro.
diff
sai com 0 se os arquivos comparados forem iguais, com 1 se forem diferentes e 2 for um erro.
$?
-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 executando.
$? nos forneça o status de execução do último comando execute no prompt. O valor '0' indica que o comando foi executado com êxito e '1' é para não ter sucesso.
$?
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.