El siguiente script bash muestra un número decimal cuando se le da un número binario.
echo $((2#$1))
¿Por qué exactamente?
Entiendo que $1
es la entrada. Tal vez 2
es la base (binario). Pero no puedo entender la sintaxis utilizada.
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
Así
echo $((16#FF))
salidas255
yecho $((2#0110))
salidas6
fuente
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
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.fuente
$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"