Co oznacza ((num # Hour)) w skrypcie bash?

18

Mam skrypt bash zawierający następujące 2 wiersze:

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

Co robi wiersz 2?

Mohsen Abasi
źródło

Odpowiedzi:

24

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

Jesse_b
źródło
2
W tym konkretnym przypadku warto wspomnieć, że (przynajmniej w najnowszych wersjach GNU date) zera wiodące można zlikwidować u źródła za pomocą -modyfikatora formatu w stylu printf+%-H
steeldriver
2
@steeldriver -yeah ... unix.stackexchange.com/q/70966/22142
don_crissti
@don_crissti - tak, to jest to, nie mogłem go znaleźć
steeldriver