O script bash a seguir exibe um número decimal quando determinado número binário.
echo $((2#$1))
Por que exatamente?
Eu entendo que $1
é a entrada. Talvez 2
seja a base (binária). Mas não consigo entender a sintaxe usada.
festança do homem
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 a página do manual [GNU bash, versão 3.2.57] tem 4890 linhas, 37094 palavras , 329778 caracteres. Essa resposta reduz apenas as 7 linhas, 176 palavras e 1115 caracteres relevantes. Eu acho que essa resposta merece seu voto positivo. (como faz este comentário ;-)Do documento em: https://tiswww.case.edu/php/chet/bash/bashref.html#Shell-Arithmetic
Então
echo $((16#FF))
saídas255
eecho $((2#0110))
saídas6
fonte
A resposta de Ipor é excelente, mas um pouco incompleta. A parte citada da página de manual do bash afirma que a sintaxe funciona apenas para constantes e não é uma constante. Você deve estar se perguntando como isso realmente funciona!
[base#]n
2#$1
Basicamente, o Bash faz a substituição de variáveis primeiro, para que
$1
seja substituído primeiro pelo seu valor. Só então ele faz a expansão aritmética, que vê apenas uma constante adequada.fonte
$1
é a entrada".$1
é expandido para produzir uma constante inteira antes que a expressão aritmética seja avaliada. Consulte gnu.org/software/bash/manual/bash.txt , seção 3.5"