Skrip bash berikut menampilkan angka desimal saat diberi nomor biner.
echo $((2#$1))
Kenapa tepatnya?
Saya mengerti itu $1
adalah input. Mungkin 2
basis (biner). Tapi saya tidak bisa mengerti sintaks yang digunakan.
bash 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
menunjukkan halaman manual [GNU bash, versi 3.2.57] menjadi 4890 baris, 37094 kata , 329778 karakter. Jawaban ini menghilangkan hanya ke 7 baris, 176 kata , 1115 karakter yang relevan. Saya pikir jawaban itu patut Anda pilih. (seperti halnya komentar ini ;-)Dari Doc di: https://tiswww.case.edu/php/chet/bash/bashref.html#Shell-Arithmetic
Jadi
echo $((16#FF))
keluaran255
danecho $((2#0110))
keluaran6
sumber
Jawaban Ipor luar biasa tetapi sedikit tidak lengkap. Bagian yang dikutip dari halaman bash man menyatakan bahwa sintaks hanya berfungsi untuk konstanta, dan bukan konstanta. Anda harus bertanya bagaimana ini benar-benar berfungsi!
[base#]n
2#$1
Pada dasarnya Bash melakukan substitusi variabel terlebih dahulu, sehingga yang
$1
pertama diganti dengan nilainya. Hanya kemudian melakukan ekspansi aritmatika, yang hanya melihat konstanta yang tepat.sumber
$1
adalah input."$1
diperluas untuk menghasilkan konstanta integer sebelum ekspresi aritmatika dievaluasi. Lihat gnu.org/software/bash/manual/bash.txt , bagian 3.5"