O que ((num # Hour)) significa em um script bash?

18

Eu tenho um script bash contendo as 2 linhas a seguir:

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

O que a linha 2 faz?

Mohsen Abasi
fonte

Respostas:

24

O 10#diz para expandir o número usando a base 10:

As constantes com um 0 inicial são interpretadas como números octais. Um '0x' ou '0X' inicial indica hexadecimal. Caso contrário, os números assumem o formato [base #] n, onde a base opcional é um número decimal entre 2 e 64, representando a base aritmética, e n é um número nessa base. Se o número da base for omitido, a base 10 será usada. Ao especificar n, os dígitos maiores que 9 são representados pelas letras minúsculas, maiúsculas '@' e '_', nessa ordem. Se a base for menor ou igual a 36, ​​as letras minúsculas e maiúsculas poderão ser usadas de forma intercambiável para representar números entre 10 e 35.

Exemplos:

Base 16:

$ echo $((16#A))
10

Base 8:

$ echo $((8#12))
10

Base 2:

$ echo $((2#1010))
10

Como o steeldriver aponta, isso provavelmente está sendo feito para lidar com quaisquer zeros à esquerda no comando date, mas com versões recentes da data GNU, isso pode ser feito com mais facilidade usando: date +%-H

Jesse_b
fonte
2
Neste caso particular, pode valer a pena mencionar que (pelo menos nas versões recentes do GNU date) zeros à esquerda podem ser suprimidos na fonte usando um estilo printf -modificador formato+%-H
steeldriver
2
@steeldriver -yeah ... unix.stackexchange.com/q/70966/22142
don_crissti
@don_crissti - Sim, é o único, eu não poderia encontrá-lo
steeldriver