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ì?
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:
Nó 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
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