Ich habe ein Bash-Skript mit den folgenden 2 Zeilen:
Hour=$(date +"%H")
Hour=$((10#$Hour))
Was macht Linie 2?
Ich habe ein Bash-Skript mit den folgenden 2 Zeilen:
Hour=$(date +"%H")
Hour=$((10#$Hour))
Was macht Linie 2?
Antworten:
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
date
) führende Nullen an der Quelle unterdrückt werden können , ein printf-Stil mit-
Format Modifikator+%-H