Что означает ((num # Hour)) в скрипте bash?

18

У меня есть скрипт bash, содержащий следующие 2 строки:

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

Что делает строка 2?

Мохсен Абаси
источник

Ответы:

24

Он 10#говорит, чтобы расширить число, используя базу 10:

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

Примеры:

База 16:

$ echo $((16#A))
10

База 8:

$ echo $((8#12))
10

База 2:

$ echo $((2#1010))
10

Как указывает Steeldriver, это, вероятно, делается для обработки любых потенциальных лидирующих нулей из команды date, но в последних версиях GNU date это можно сделать проще, используя: date +%-H

Jesse_b
источник
2
В этом конкретном случае, возможно, стоит упомянуть, что (по крайней мере, в последних версиях GNU date) -+%-H
начальные
2
@steeldriver -yeah ... unix.stackexchange.com/q/70966/22142
don_crissti
@don_crissti - да, я не смог его найти
steeldriver