Apa artinya ((num # Jam)) dalam skrip bash?

18

Saya memiliki skrip bash yang berisi 2 baris berikut:

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

Apa yang dilakukan baris 2?

Mohsen Abasi
sumber

Jawaban:

24

The 10#mengatakan itu untuk memperluas nomor menggunakan basis 10:

Konstanta dengan awalan 0 ditafsirkan sebagai angka oktal. Sebuah '0x' atau '0X' yang memimpin menunjukkan heksadesimal. Jika tidak, angka-angkanya mengambil bentuk [basis #] n, di mana basis opsional adalah angka desimal antara 2 dan 64 yang mewakili basis aritmatika, dan n adalah angka dalam basis itu. Jika basis # dihilangkan, maka basis 10 digunakan. Saat menentukan n, digit lebih besar dari 9 diwakili oleh huruf kecil, huruf besar, '@', dan '_', dalam urutan itu. Jika basis kurang dari atau sama dengan 36, huruf kecil dan huruf besar dapat digunakan secara bergantian untuk mewakili angka antara 10 dan 35.

Contoh:

Basis 16:

$ echo $((16#A))
10

Basis 8:

$ echo $((8#12))
10

Basis 2:

$ echo $((2#1010))
10

Seperti yang ditunjukkan oleh steeldriver, hal ini kemungkinan dilakukan untuk menangani potensi nol di awal dari perintah tanggal tetapi dengan versi terbaru dari tanggal GNU dapat dilakukan dengan lebih mudah menggunakan: date +%-H

Jesse_b
sumber
2
Dalam kasus khusus ini, mungkin perlu disebutkan bahwa (setidaknya dalam versi terbaru dari GNU date) nol terkemuka dapat ditekan pada sumber menggunakan -pengubah format printf-style+%-H
steeldriver
2
@steeldriver -yeah ... unix.stackexchange.com/q/70966/22142
don_crissti
@don_crissti - ya itu orangnya, saya tidak bisa menemukannya
steeldriver