2012-10-05 60 views
11

me encontré con un script de shell que contiene una declaración como,

if [ $val -eq $? ] 

¿Qué significa $? aquí?

+0

[aquí es su respuesta] [1], que puede coincidir con usted pregunta [1]: http://stackoverflow.com/questions/7101995/what-does-if-eq-0- mean-for-shell-scripts? answertab = active # tab-top –

+0

posible duplicado de [¿Cuáles son las variables de shell de signo de dólar especiales?] (http://stackoverflow.com/questions/5163144/what-are-the-special -dollar-sign-shell-variables) – hammar

Respuesta

17
$? 

devuelve el estado del último comando terminado. El estado 0 le dice que todo terminó bien.

Además el signo $ es un símbolo especial - y en ese caso $val extraer el valor que se mantenga por la variable val

2

Este es el valor del estado de salida del comando anterior. Esto es 0 en caso de éxito.

3

Lo que hace $? significa aquí?

$? es el último resultado de una salida de estado del ... 0 es por defecto "exitoso"

bash# ls *.* 
bash# echo $? 
bash# 0 
bash# ls /tmp/not/existing/ 
bash# echo $? 
bash# 2 
17

$# = número de argumentos. La respuesta es 3.

[email protected] = qué parámetros se pasaron. La respuesta es 1 2 3.

$? = fue el último comando exitoso. La respuesta es 0 que significa 'sí'.

+0

Tal vez no debería molestarme, pero el hecho de que "0 == True" realmente moldea mis engranajes. – jmracek

12

Encontré que el link es muy útil y es la gran respuesta. Incluye claramente expresión con muestra.

enter image description here

-1

ls *.* o ls produciría el mismo resultado. Significado muestra cero o más archivos con cualquier extensión en el directorio actual.

echo $? mostraría el estado de salida. Si se muestra al menos un archivo desde el último comando, el estado de salida sería cero (éxito).

+0

No exactamente correcto: 'ls *. *' Filtrará el contenido del directorio actual y mostrará solo el archivo y los directorios con el período en ellos; para los directorios mostrará el contenido (puede depender de la implementación). Consulte también el siguiente comando 'mkdir test && cd test && ls; echo" $? "' Devolverá 0. Sin embargo, 'mkdir -m -r wo_dir && cd wo_dir && echo" test "> 1.txt && ls; echo" $? " 'devolverá 1, con el mensaje' ls:.: Permiso denegado' aunque el archivo se haya creado. – artdanil

Cuestiones relacionadas