Tengo un script bash que contiene las siguientes 2 líneas:
Hour=$(date +"%H")
Hour=$((10#$Hour))
¿Qué hace la línea 2?
Tengo un script bash que contiene las siguientes 2 líneas:
Hour=$(date +"%H")
Hour=$((10#$Hour))
¿Qué hace la línea 2?
Respuestas:
El 10#
le dice que expanda el número usando la base 10:
Las constantes con un 0 inicial se interpretan como números octales. Un '0x' o '0X' inicial denota hexadecimal. De lo contrario, los números toman la forma [base #] n, donde la base opcional es un número decimal entre 2 y 64 que representa la base aritmética, yn es un número en esa base. Si se omite la base #, se usa la base 10. Al especificar n, los dígitos mayores que 9 están representados por las letras minúsculas, las letras mayúsculas, '@' y '_', en ese orden. Si la base es menor o igual a 36, las letras minúsculas y mayúsculas se pueden usar indistintamente para representar números entre 10 y 35.
Ejemplos:
Base 16:
$ echo $((16#A))
10
Base 8:
$ echo $((8#12))
10
Base 2:
$ echo $((2#1010))
10
Como Steeldriver señala, es probable que esto se esté haciendo para manejar los posibles ceros a la izquierda del comando de fecha, pero con las versiones recientes de GNU date se puede hacer más fácil usando: date +%-H
date
) los ceros iniciales se pueden suprimir en la fuente utilizando un-
modificador de formato de estilo printf+%-H