El comando de prueba en Unix no imprime una salida

20

Cuando escribo esto en la terminal

test 4 -lt 6

No obtengo ningún resultado. Por qué no? Necesito que 0 o 1

indieman
fuente
1
¿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
hombre trabajando
fuente
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á.

prisa
fuente
2

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 '<=' 6
1

Dos cosas a tener en cuenta:

  1. probablemente necesitará citar al operador ya que muchos de ellos entran en conflicto con los metacaracteres de shell
  2. 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.
camh
fuente
1
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.
Emanuel Berg
2

Puede escribir el siguiente comando:

echo $(test -e myFile.txt) $?
MCH
fuente