Comenzando con bash: -lt y -gt argumentos

24

Estoy empezando con bash y encontré lo siguiente:

if test $first -lt $second
then
  echo $first is lower than $second
else
  if test $first -gt $second
  then
    echo $first is higher than $second
  else
    echo $first and $second are equals
  fi
fi

Para leer el script y ejecutarlo, sé lo que hace, pero no para qué sirven -lt y -gt.

¿Alguien puede decirme cuál es el nombre de ese tipo de 'herramienta' y qué hacen (-lt y -gt)? ¡Gracias!

user47579
fuente
99
Lo siento, pero creo que vale la pena señalar que las echodeclaraciones en el código responden a su pregunta.
devnull
Faltan citas en torno a las variables
Stéphane Chazelas

Respuestas:

29

Es la abreviatura de less thany greater than. Se utiliza para la comparación de enteros en bash. Puede leer más escribiendo man test:

   ....
   INTEGER1 -gt INTEGER2
          INTEGER1 is greater than INTEGER2
   ....
   INTEGER1 -lt INTEGER2
          INTEGER1 is less than INTEGER2
   ....
Cuonglm
fuente
7

Puede encontrar la definición de -lty -gten la documentación del testcomando ( man test), o en la documentación de bash ya que testes un comando incorporado en bash (como en la mayoría de los otros shells).

-lty -gtson comparaciones numéricas (menor que [y no igual], mayor que [y no igual]). También hay operadores menores / mayores o iguales -ley -ge, operadores iguales y no iguales -eqy -ne. Estos son operadores numéricos, por lo que habrá un error si alguno de los lados no es un número y 9se considera menor que 10.

La razón por la que -ltse usan nombres como en lugar de lo habitual <es que el personaje <se interpretaría como una redirección. Los operadores =y !=también existen, pero realizan una comparación de cadenas: test 00 -eq 0es verdadero mientras que test 00 = 0es falso.

Algunos shells, incluido bash, también tienen operadores <y >realizan una comparación lexicográfica de cadenas, por lo que test 9 \< 10es falso porque 9está ordenado antes 1(la barra invertida evita que el carácter <sea ​​interpretado como un operador de redireccionamiento). Estos shells también ofrecen la sintaxis de doble paréntesis para las pruebas, por ejemplo [[ 9 < 10 ]](en lugar de [ 9 \< 10 ]), que no pueden tener redirecciones en el interior, por lo que <no es necesario citarlas.

Gilles 'SO- deja de ser malvado'
fuente
4

Son solo operadores.

Simplemente: gty ltsignifica> (mayor que) y <(menor que).

Puede consultar aquí para obtener más información sobre operadores:

Questionmark
fuente