¿No sería bueno si 'prueba' tuviera una opción para generar un valor inmediatamente? Solo la opción. Eso es todo lo que necesitaríamos.
Todd Walton el
Respuestas:
15
Obtienes 0 o 1. En el código de salida.
bash-4.2$ test 4-lt 6
bash-4.2$ echo $?0
bash-4.2$ test 4-gt 6
bash-4.2$ echo $?1
Actualización : para almacenar el código de salida para su uso posterior, simplemente asígnelo a una variable:
bash-4.2$ test 4-lt 6
bash-4.2$ first=$?
bash-4.2$ test 4-gt 6
bash-4.2$ second=$?
bash-4.2$ echo "first test gave $first and the second $second"
first test gave 0 and the second 1
¿hay alguna manera de canalizar el código de salida?
indieman
3
No. Solo se puede redirigir la salida. De todos modos, generalmente no hay necesidad de eso. Para almacenarlo para su uso posterior, simplemente asígnelo a una variable. O díganos cuál es exactamente su intención con ese valor.
manatwork
2
El código de salida se coloca en la $?variable, al menos hasta que se sobrescribe con el siguiente comando que ejecute.
Shadur
1
PD: puede usar la $PIPESTATUSmatriz para obtener el resultado de varios comandos en una tubería. $?será el resultado del último comando en la tubería si la pipefailopción está desactivada (el valor predeterminado).
l0b0
@indieman, si lo que necesita es hacer otra cosa según el estado de salida, ni siquiera necesita guardarlo, solo useif test 4 -lt 6; then echo test succeeeded; else echo test failed; fi
Wildcard el
5
Otra forma es
test 4-lt 6&& echo 1|| echo 0
Pero ten cuidado en ese caso. Si testdevuelve el éxito y echo 1falla echo 0se ejecutará.
Si desea el resultado de una comparación de salida estándar en lugar de un código de salida, puede usar el expr(1)comando:
$ expr 4'<='61
Dos cosas a tener en cuenta:
probablemente necesitará citar al operador ya que muchos de ellos entran en conflicto con los metacaracteres de shell
el valor de salida es el opuesto del código de retorno para test. testdevuelve 0 para verdadero (que es el estándar para los códigos de salida), pero exprimprime 1 para verdadero.
3. Hay un test orden interna del shell, que es considerablemente más rápido (alrededor de 50 veces en mi máquina) que el testy exprlos ejecutables de la coreutils paquete.
manatwork
+1 para el segundo punto. Podría encontrar un error que es muy frustrante de encontrar si lo arruinas.
Respuestas:
Obtienes 0 o 1. En el código de salida.
Actualización : para almacenar el código de salida para su uso posterior, simplemente asígnelo a una variable:
fuente
$?
variable, al menos hasta que se sobrescribe con el siguiente comando que ejecute.$PIPESTATUS
matriz para obtener el resultado de varios comandos en una tubería.$?
será el resultado del último comando en la tubería si lapipefail
opción está desactivada (el valor predeterminado).if test 4 -lt 6; then echo test succeeeded; else echo test failed; fi
Otra forma es
Pero ten cuidado en ese caso. Si
test
devuelve el éxito yecho 1
fallaecho 0
se ejecutará.fuente
Si desea el resultado de una comparación de salida estándar en lugar de un código de salida, puede usar el
expr(1)
comando:Dos cosas a tener en cuenta:
test
.test
devuelve 0 para verdadero (que es el estándar para los códigos de salida), peroexpr
imprime 1 para verdadero.fuente
test
orden interna del shell, que es considerablemente más rápido (alrededor de 50 veces en mi máquina) que eltest
yexpr
los ejecutables de la coreutils paquete.Puede escribir el siguiente comando:
fuente