Respuestas:
hombre 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
indica que la página del manual [GNU bash, versión 3.2.57] tiene 4890 líneas, 37094 palabras , 329778 caracteres. Esta respuesta lo reduce a solo 7 líneas, 176 palabras , 1115 caracteres que son relevantes. Creo que esa respuesta merece tu voto positivo. (como este comentario ;-)
Del Doc en: https://tiswww.case.edu/php/chet/bash/bashref.html#Shell-Arithmetic
Las constantes con un 0 inicial se interpretan como números octales. Un '0x' o '0X' inicial denota hexadecimal. De lo contrario, los números toman la forma [base #] n, donde la base opcional es un número decimal entre 2 y 64 que representa la base aritmética, yn es un número en esa base. Si se omite la base #, se usa la base 10. Al especificar n, los dígitos mayores que 9 están representados por las letras minúsculas, las letras mayúsculas, '@' y '_', en ese orden. Si la base es menor o igual a 36, las letras minúsculas y mayúsculas se pueden usar indistintamente para representar números entre 10 y 35.
Así echo $((16#FF))
salidas 255
y echo $((2#0110))
salidas6
La respuesta de Ipor es excelente pero muy levemente incompleta. La parte citada de la página de manual de bash establece que la sintaxis solo funciona para constantes y no es una constante. ¡Deberías preguntarte cómo funciona esto realmente ![base#]n
2#$1
EXPANSIÓN
La expansión se realiza en la línea de comando después de que se ha dividido en palabras. Se realizan siete tipos de expansión: expansión de llaves, expansión de tilde, expansión de parámetros y variables, sustitución de comandos, expansión aritmética, división de palabras y expansión de nombre de ruta.
El orden de las expansiones es: expansión de llaves; expansión de tilde, expansión de parámetros y variables, expansión aritmética y sustitución de comandos (hecho de izquierda a derecha); división de palabras; y expansión de nombre de ruta.
Básicamente, Bash está haciendo una sustitución de variables primero, por lo que $1
primero se reemplaza por su valor. Solo entonces realiza la expansión aritmética, que solo ve una constante adecuada.
$1
es la entrada".
$1
se expande para producir una constante entera antes de evaluar la expresión aritmética. Consulte gnu.org/software/bash/manual/bash.txt , sección 3.5"