Estoy revisando un contador en un bucle para determinar si es más grande que el máximo, si se especifica un parámetro opcional. Ya que es opcional, me puede por defecto el máximo a un valor especial o para el máximo entero. La primera opción requeriría un extra revisar en cada iteración, por lo que me gustaría en lugar de averiguar ¿cuál es el máximo entero de que va a trabajar con el -gt Bourne Shell operación.

InformationsquelleAutor l0b0 | 2010-06-03

3 Comentarios

  1. 3

    Yo me quedaría clara de entero límites como son no es portable y problemática

    $ test 123412341234112341235 -gt 1 || echo bash compares ints
    -bash: test: 123412341234112341235: integer expression expected
    bash compares ints
    $ env test 1 -gt 123412341234112341235 || echo coreutils compares strings
    coreutils compares strings

    Lugar me gustaría simplemente hacer lo que usted sugiere y hacer el extra de comparación como:

    [ "$limit" ] && [ $count -gt $limit ]
  2. 2

    El Bourne shell no tiene instalaciones para el almacenamiento o la manipulación de los números – todo lo que se almacena como una cadena. Si usted se está preguntando acerca de este tipo de cosas:

    if [ $x -gt $y ]

    a continuación, que es manejado por separado (en el shell Bourne) ejecutable llamado test, que tiene un enlace simbólico llamado ‘[‘. Así que tu pregunta es realmente acerca de los límites de la test comando, que todos los docs puedo encontrar parecer bastante reticente acerca de.

  3. 2

    En mi sistema, el máximo entero de Bash parece ser el mismo que el LONG_MAX constante de mi Perl POSIX de la biblioteca. Obviamente, esto va a variar en su plataforma, y cómo su Bash fue compilado, etc. Pero eso parece ser un buen punto de partida para las pruebas:

    declare -i max=$(perl -MPOSIX -le 'print LONG_MAX')
    
    echo $max
    9223372036854775807
    
    echo "max+1 = " $(( i += 1 ))
    max+1 =  -9223372036854775808
    
    uname -a
    Linux x200s 3.2.0-33-generic #52-Ubuntu SMP Thu Oct 18 16:29:15 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux

    Actualización: Después de intentar esto en una edad de 32 bits de Linux, veo que mi Perl POSIX LONG_MAX es 2147483647, pero que Bash todavía tiene el mismo límite. Parece ser definido en /usr/include/límites.h, y a depender de su __WORDSIZE, que puede ser de 64 bits, incluso en sistemas de 32 bits :

    /* Minimum and maximum values a `signed long int' can hold.  */
    #  if __WORDSIZE == 64
    #   define LONG_MAX     9223372036854775807L
    #  else
    #   define LONG_MAX     2147483647L
    #  endif

Dejar respuesta

Please enter your comment!
Please enter your name here