Que signifie ((num # Hour)) dans un script bash?

18

J'ai un script bash contenant les 2 lignes suivantes:

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

Que fait la ligne 2?

Mohsen Abasi
la source

Réponses:

24

Le lui 10#indique d'augmenter le nombre en utilisant la base 10:

Les constantes avec un 0 en tête sont interprétées comme des nombres octaux. Un «0x» ou «0X» en tête indique hexadécimal. Sinon, les nombres prennent la forme [base #] n, où la base facultative est un nombre décimal compris entre 2 et 64 représentant la base arithmétique, et n est un nombre dans cette base. Si la base # est omise, la base 10 est utilisée. Lorsque vous spécifiez n, les chiffres supérieurs à 9 sont représentés par les lettres minuscules, les lettres majuscules, '@' et '_', dans cet ordre. Si la base est inférieure ou égale à 36, les lettres minuscules et majuscules peuvent être utilisées de manière interchangeable pour représenter des nombres compris entre 10 et 35.

Exemples:

Base 16:

$ echo $((16#A))
10

Base 8:

$ echo $((8#12))
10

Base 2:

$ echo $((2#1010))
10

Comme le souligne Steeldriver, cela est probablement fait pour gérer tous les zéros potentiels potentiels à partir de la commande date, mais avec les versions récentes de GNU date, cela peut être fait plus facilement en utilisant: date +%-H

Jesse_b
la source
2
Dans ce cas particulier, il peut être utile de mentionner que (au moins dans les versions récentes de GNU date) les zéros de tête peuvent être supprimés à la source en utilisant un -modificateur de format de style printf+%-H
steeldriver
2
@steeldriver -yeah ... unix.stackexchange.com/q/70966/22142
don_crissti
@don_crissti - oui c'est celui-là, je ne l'ai pas trouvé
steeldriver