Câu trả lời:
người đàn ông bash
echo [-neE] [arg ...]
Output the args, separated by spaces, followed by a newline.
The return status is 0 unless a write error occurs. If -n is
specified, the trailing newline is suppressed. If the -e option
is given, interpretation of the following backslash-escaped
characters is enabled.
[...]
Arithmetic Expansion
Arithmetic expansion allows the evaluation of an arithmetic expression
and the substitution of the result. The format for arithmetic expan‐
sion is:
$((expression))
[...]
Constants with a leading 0 are interpreted as octal numbers. A leading
0x or 0X denotes hexadecimal. Otherwise, numbers take the form
[base#]n, where the optional base is a decimal number between 2 and 64
representing the arithmetic base, and n is a number in that base. If
base# is omitted, then base 10 is used. When specifying n, the digits
greater than 9 are represented by the lowercase letters, the uppercase
letters, @, and _, in that order. If base is less than or equal to 36,
lowercase and uppercase letters may be used interchangeably to repre‐
sent numbers between 10 and 35.
man bash | wc
cho biết trang man [GNU bash, phiên bản 3.2.57] là 4890 dòng, 37094 từ , 329778 ký tự. Câu trả lời này chỉ có 7 dòng, 176 từ , 1115 ký tự có liên quan. Tôi nghĩ rằng câu trả lời xứng đáng upvote của bạn. (cũng như nhận xét này ;-)
Từ tài liệu tại: https://tiswww.case.edu/php/chet/bash/bashref.html#Shell-Arith chữ số
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ì vậy, echo $((16#FF))
đầu ra 255
và echo $((2#0110))
đầu ra6
Câu trả lời của Ipor là tuyệt vời nhưng rất ít không đầy đủ. Phần được trích dẫn của trang bash man nói rằng cú pháp chỉ hoạt động cho các hằng và không phải là hằng số. Bạn nên hỏi làm thế nào điều này thực sự hoạt động![base#]n
2#$1
SỰ BÀNH TRƯỚNG
Mở rộng được thực hiện trên dòng lệnh sau khi nó đã được chia thành các từ. Có bảy loại mở rộng được thực hiện: mở rộng dấu ngoặc, mở rộng dấu ngã, mở rộng tham số và biến, thay thế lệnh, mở rộng số học, tách từ và mở rộng tên đường dẫn.
Thứ tự mở rộng là: mở rộng cú đúp; mở rộng dấu ngã, mở rộng tham số và biến, mở rộng số học và thay thế lệnh (được thực hiện theo kiểu từ trái sang phải); tách từ; và mở rộng tên đường dẫn.
Về cơ bản Bash đang thực hiện thay thế đầu tiên, để cái $1
đầu tiên được thay thế bằng giá trị của nó. Chỉ sau đó nó mới mở rộng số học, chỉ nhìn thấy một hằng số thích hợp.
$1
là đầu vào."
$1
được mở rộng để tạo hằng số nguyên trước khi biểu thức số học được đánh giá. Xem gnu.org/software/bash/manual/bash.txt , phần 3.5"