Що означає ((число # година)) у баш-скрипті?


18

У мене є сценарій bash, що містить наступні 2 рядки:

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

Що робить другий рядок?

Відповіді:


24

10#Каже йому розширити число , використовуючи базу 10:

Константи з провідним 0 інтерпретуються як вісімкові числа. Провідний '0x' або '0X' позначає шістнадцятковий. В іншому випадку числа приймають форму [base #] n, де необов'язковою базою є десятковий номер між 2 і 64, що представляє арифметичну базу, а n - число в цій базі. Якщо база # опущена, то використовується база 10. Указуючи n, цифри, що перевищують 9, представлені малими літерами, великими літерами, "@" та "_" у такому порядку. Якщо база становить менше 36 або дорівнює 36, то для представлення чисел між 10 і 35 можуть використовуватися рядкові та малі літери.

Приклади:

База 16:

$ echo $((16#A))
10

База 8:

$ echo $((8#12))
10

База 2:

$ echo $((2#1010))
10

Як зазначає steeldriver, це, ймовірно, робиться для обробки будь-яких потенційних нульових команд з дати, але з останніми версіями дати GNU це можна зробити простіше за допомогою: date +%-H


2
У цьому конкретному випадку, можливо, варто згадати, що (принаймні, в останніх версіях GNU date) провідні нулі можуть бути придушені у джерелі, використовуючи -модифікатор формату printf+%-H
steeldriver

2
@steeldriver - так ... unix.stackexchange.com/q/70966/22142
don_crissti

@don_crissti - так, це той, я не міг його знайти
steeldriver
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.