((Num # Hour)) có nghĩa là gì trong một tập lệnh bash?


18

Tôi có một tập lệnh bash chứa 2 dòng sau:

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

Dòng 2 làm gì?

Câu trả lời:


24

10#bảo nó mở rộng số lượng bằng cách sử dụng cơ sở 10:

Các hằng số có 0 đứng đầu được hiểu là các số bát phân. Một '0x' hoặc '0X' hàng đầu biểu thị hệ thập lục phân. Mặt khác, các số có dạng [cơ sở #] n, trong đó cơ sở tùy chọn là số thập phân từ 2 đến 64 đại diện cho cơ sở số học và n là một số trong cơ sở đó. Nếu cơ sở # bị bỏ qua, thì cơ sở 10 được sử dụng. Khi chỉ định n, các chữ số lớn hơn 9 được biểu thị bằng các chữ cái viết thường, các chữ cái in hoa, '@' và '_', theo thứ tự đó. Nếu cơ sở nhỏ hơn hoặc bằng 36, chữ cái viết thường và chữ hoa có thể được sử dụng thay thế cho nhau để thể hiện các số từ 10 đến 35.

Ví dụ:

Cơ sở 16:

$ echo $((16#A))
10

Cơ sở 8:

$ echo $((8#12))
10

Cơ sở 2:

$ echo $((2#1010))
10

Như Steeldo chỉ ra rằng điều này có thể được thực hiện để xử lý bất kỳ số 0 tiềm năng hàng đầu nào từ lệnh date nhưng với các phiên bản gần đây của ngày GNU, việc sử dụng có thể được thực hiện dễ dàng hơn: date +%-H


2
Trong trường hợp cụ thể này, có thể đáng nói đến việc (ít nhất là trong các phiên bản gần đây của GNU date) các số 0 đứng đầu có thể bị triệt tiêu tại nguồn bằng cách sử dụng công cụ -sửa đổi định dạng kiểu printf+%-H
Steel


@don_crissti - vâng đó là cái tôi không thể tìm thấy nó
Steeldo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.