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?

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


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


@don_crissti - Sim, é o único, eu não poderia encontrá-lo
steeldriver
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.