Mam skrypt bash zawierający następujące 2 wiersze:
Hour=$(date +"%H")
Hour=$((10#$Hour))
Co robi wiersz 2?
10#
Informuje go rozszerzyć liczbę zastosowaniem zasady 10:
Stałe z wiodącym 0 są interpretowane jako liczby ósemkowe. Wiodące „0x” lub „0X” oznacza liczbę szesnastkową. W przeciwnym razie liczby przyjmują postać [podstawa #] n, gdzie opcjonalna podstawa jest liczbą dziesiętną między 2 a 64 reprezentującą podstawę arytmetyczną, a n jest liczbą w tej podstawie. Jeśli baza nr zostanie pominięta, zostanie użyta baza 10. Przy określaniu n cyfry większe niż 9 są reprezentowane przez małe litery, wielkie litery „@” i „_” w tej kolejności. Jeśli podstawa jest mniejsza lub równa 36, małe i wielkie litery mogą być używane zamiennie do reprezentowania liczb od 10 do 35.
Przykłady:
Baza 16:
$ echo $((16#A))
10
Baza 8:
$ echo $((8#12))
10
Baza 2:
$ echo $((2#1010))
10
Jak wskazuje steeldriver, jest to prawdopodobnie robione, aby obsłużyć wszelkie potencjalne zera wiodące od polecenia date, ale w najnowszych wersjach GNU date można to zrobić łatwiej, używając: date +%-H
date
) zera wiodące można zlikwidować u źródła za pomocą-
modyfikatora formatu w stylu printf+%-H