Відповіді:
людина баш
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вказує на головну сторінку [GNU bash, версія 3.2.57] на 4890 рядків, 37094 слів , 329778 символів. Ця відповідь закреслює, що до відповідних лише 7 рядків, 176 слів , 1115 символів. Я вважаю, що ця відповідь заслуговує на вашу позицію. (як це коментар ;-)
З Документу за адресою: https://tiswww.case.edu/php/chet/bash/bashref.html#Shell-Arithmetic
Константи з провідним 0 інтерпретуються як вісімкові числа. Провідний '0x' або '0X' позначає шістнадцятковий. В іншому випадку числа приймають форму [base #] n, де необов'язковою базою є десятковий номер між 2 і 64, що представляє арифметичну базу, а n - число в цій базі. Якщо база # опущена, то використовується база 10. Указуючи n, цифри, що перевищують 9, представлені малими літерами, великими літерами, "@" та "_" у такому порядку. Якщо база становить менше 36 або дорівнює 36, то для представлення чисел між 10 і 35 можуть використовуватися рядкові та малі літери.
Отже, echo $((16#FF))виходи 255та echo $((2#0110))виходи6
Відповідь Іпора відмінна, але дуже трохи неповна. У цитованій частині сторінки bash man зазначається, що синтаксис працює лише для констант, а не є постійною. Ви повинні запитати, як це насправді працює![base#]n2#$1
РОЗШИРЕННЯ
Розширення виконується в командному рядку після його поділу на слова. Існує сім видів розширення: розширення дужок, розширення тильди, розширення параметрів і змінних, підміна команд, арифметичне розширення, розбиття слів і розширення імені шляху.
Порядок розширень: розширення дужок; розширення тильди, розширення параметрів і змінних, арифметичне розширення та заміна команд (виконується зліва направо); розділення слів; і розширення імені шляху.
В основному Bash спочатку робить змінну підстановку, так що $1перший замінюється його значенням. Тільки тоді він робить арифметичне розширення, яке бачить лише належну константу.
$1це вхід".
$1розгорнуто для отримання цілої константи перед тим, як оцінити арифметичний вираз. Див. Gnu.org/software/bash/manual/bash.txt , розділ 3.5"