¿Qué es '$?' ? ¿Es una variable?

21

La pregunta es bastante sencilla. Puedo obtener el código de salida del comando anterior usando $? . Pero, ¿qué es exactamente?

No creo que sea una variable, porque no puedes tener ningún carácter especial en el nombre de la variable que no sea _ .

foo?foo=10

generará el error: foo?foo=10: command not found

Entonces, si no es una variable, ¿qué es? ¿Hay otros como este?

    
pregunta daltonfury42 09.07.2015 - 18:24

4 respuestas

20

¿Qué es?

$? es una variable incorporada que almacena el estado de salida de un comando, función o el propio script.

$? lee el estado de salida del último comando ejecutado. Después de que una función regresa, $? da el estado de salida del último comando ejecutado en la función. Esta es la forma en que Bash da a las funciones un "valor de retorno". Devuelve 0 en caso de éxito o un entero en el rango 1 - 255 en error.

¿Hay otros similares también?

Sí, hay varias variables integradas de este tipo en bash. Puede ver una lista aquí . Referir:   enlace

    
respondido por el Ron 09.07.2015 - 18:36
22

$? es una variable pero una especial, por eso se permiten los caracteres especiales. ($?) Se expande al estado de salida de la tubería de primer plano ejecutada más recientemente.

No es el único, el shell trata varios parámetros especialmente. Estos parámetros solo pueden ser referenciados; La asignación a ellos no está 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 $@.

Fuentes:

respondido por el Sylvain Pineau 09.07.2015 - 18:37
6

$? es un parámetro de shell especial (variable).

En general, todas las variables definidas por el usuario deben nombrarse usando solo los caracteres de la clase de caracteres [:alnum:] , es decir, [a-zA-Z0-9_] (tampoco puede comenzar con [0-9] ).

En pocas palabras, $? es una variable especial ( y hay bastantes de estos ) que se puede considerar como una característica interna del propio shell que proporciona el código de salida del comando anterior (ya sea exitoso o fallido).

Puede leer esto para tener más idea sobre las variables.

    
respondido por el heemayl 09.07.2015 - 18:40
4

$? es una variable especial en bash que siempre contiene el código de retorno / salida del último comando ejecutado.

Puedes verlo en una terminal ejecutando echo $? .

Los códigos de retorno están en el rango [0; 255].
Un código de retorno de 0 generalmente significa que todo está bien.
Otros valores indican errores. La mayoría de las aplicaciones devuelven 1 o valores personalizados. Si no se encontró un comando, la variable generalmente contiene 127

Si desea establecer esta variable en un valor específico, puede hacerlo fácilmente con bash -c "exit 5" para devolver, por ejemplo, el código de retorno 5 .

    
respondido por el Byte Commander 09.07.2015 - 18:36

Lea otras preguntas en las etiquetas