Respuestas:
$?
se expande al estado de salida de la canalización en primer plano ejecutada más recientemente. Consulte la sección Parámetros especiales del manual Bash .
En términos más simples, es el estado de salida del último comando.
La respuesta de Cjm es correcta, pero $?
se puede usar de manera tonta en los scripts de shell, y me gustaría advertir contra eso. Muchos scripts de shell incorrectos tienen un patrón 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
Si es posible (las cuestiones de legibilidad a veces se entrometen), debe codificar esta situación de manera diferente:
if run_some_command
then
# Do work when command exists on success
else
# Do failure exit work
fi
Este último uso es más rápido, no contamina el espacio de nombres de las variables del shell con lo que equivale a variables temporales, a menudo puede ser mucho más legible para los humanos y fomenta el uso de "lógica positiva", la práctica de escribir condicionales sin negaciones, que tiene simplicidad en la mayoría de las situaciones. Elimina el uso de $?
en su mayor parte.
Además de lo que dijo cjm , si el valor de $?
es 0, el proceso anterior terminó normalmente (o con éxito). De lo contrario, hubo algún error.
diff
sale con un 0 si los archivos comparados son iguales, con un 1 si son diferentes y 2 es un error.
$?
-El estado de salida del último comando ejecutado.
$0
-El nombre del archivo del script actual.
$#
-El número de argumentos suministrados a un script.
$$
-El número de proceso del shell actual. Para los scripts de shell, este es el ID de proceso bajo el cual se están ejecutando.
PS proporcione el estado de ejecución del último comando de ejecución en el indicador. El valor '0' indica que el comando se ejecutó con éxito y '1' no es correcto.
$?
determina el estado de salida del comando ejecutado. $
seguido de números (por ejemplo $1
, $2
etc.) representa los parámetros en el script de shell.