¿Qué significa ((num # Hour)) en un script bash?

18

Tengo un script bash que contiene las siguientes 2 líneas:

Hour=$(date +"%H")
Hour=$((10#$Hour))

¿Qué hace la línea 2?

Mohsen Abasi
fuente

Respuestas:

24

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

Jesse_b
fuente
2
En este caso particular, vale la pena mencionar que (al menos en versiones recientes de GNU date) los ceros iniciales se pueden suprimir en la fuente utilizando un -modificador de formato de estilo printf+%-H
steeldriver
2
@steeldriver -yeah ... unix.stackexchange.com/q/70966/22142
don_crissti
@don_crissti - sí, ese es el que no pude encontrar
steeldriver