Was bedeutet ((num # Hour)) in einem Bash-Skript?

18

Ich habe ein Bash-Skript mit den folgenden 2 Zeilen:

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

Was macht Linie 2?

Mohsen Abasi
quelle

Antworten:

24

Das 10#sagt ihm, dass er die Zahl mit der Basis 10 erweitern soll:

Konstanten mit einer führenden 0 werden als Oktalzahlen interpretiert. Ein führendes "0x" oder "0X" bedeutet hexadezimal. Ansonsten haben Zahlen die Form [base #] n, wobei die optionale Basis eine Dezimalzahl zwischen 2 und 64 ist, die die arithmetische Basis darstellt, und n eine Zahl in dieser Basis ist. Wenn base # weggelassen wird, wird base 10 verwendet. Wenn Sie n angeben, werden die Ziffern größer als 9 durch die Kleinbuchstaben, die Großbuchstaben '@' und '_' in dieser Reihenfolge dargestellt. Wenn base kleiner oder gleich 36 ist, können Klein- und Großbuchstaben austauschbar verwendet werden, um Zahlen zwischen 10 und 35 darzustellen.

Beispiele:

Basis 16:

$ echo $((16#A))
10

Basis 8:

$ echo $((8#12))
10

Basis 2:

$ echo $((2#1010))
10

Wie steeldriver darauf hinweist, wird dies wahrscheinlich durchgeführt, um mögliche führende Nullen aus dem Datumsbefehl zu handhaben, aber mit neueren Versionen von GNU date kann es einfacher gemacht werden, wenn: date +%-H

Jesse_b
quelle
2
In diesem speziellen Fall könnte es sein , dass erwähnenswert (zumindest in der letzten Versionen von GNU date) führende Nullen an der Quelle unterdrückt werden können , ein printf-Stil mit -Format Modifikator+%-H
steeldriver
2
@steeldriver -yeah ... unix.stackexchange.com/q/70966/22142
don_crissti
@don_crissti - ja das ist derjenige, ich konnte es nicht finden
Steeldriver