Cosa significa ((num # ora)) in uno script bash?


18

Ho uno script bash contenente le seguenti 2 righe:

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

Cosa fa la linea 2?

Risposte:


24

Gli 10#dice di espandere il numero usando la base 10:

Le costanti con uno 0 iniziale sono interpretate come numeri ottali. Un '0x' o '0X' iniziale indica esadecimale. Altrimenti, i numeri assumono la forma [base #] n, dove la base opzionale è un numero decimale compreso tra 2 e 64 che rappresenta la base aritmetica e n è un numero in quella base. Se la base # viene omessa, viene utilizzata la base 10. Quando si specifica n, le cifre maggiori di 9 sono rappresentate dalle lettere minuscole, dalle lettere maiuscole, '@' e '_', in questo ordine. Se la base è inferiore o uguale a 36, ​​le lettere minuscole e maiuscole possono essere utilizzate in modo intercambiabile per rappresentare numeri compresi tra 10 e 35.

Esempi:

Base 16:

$ echo $((16#A))
10

Base 8:

$ echo $((8#12))
10

Base 2:

$ echo $((2#1010))
10

Come sottolinea steeldriver, è probabile che questo venga fatto per gestire eventuali potenziali zeri iniziali dal comando date, ma con le versioni recenti di GNU date può essere fatto più facilmente usando: date +%-H


2
In questo caso particolare, vale la pena ricordare che (almeno nelle ultime versioni di GNU date) gli zeri -+%-H
iniziali


@don_crissti - sì, è quello, non riuscivo a trovarlo
steeldriver
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.