理解代码({0..1}{0..1}{0..1}{0..1}{0..1}{0..1}{0..1}{0..1 })

Understanding code ({0..1}{0..1}{0..1}{0..1}{0..1}{0..1}{0..1}{0..1})

我在 Bash shell Decimal to Binary conversion 中看到了以下代码,我想知道它是如何工作的?我尝试谷歌搜索无济于事。

D2B=({0..1}{0..1}{0..1}{0..1}{0..1}{0..1}{0..1}{0..1})

echo ${D2B[7]}

上面的代码是做什么的?

{N..M},对于整数文字 N 和 M,生成从 N 到 M 的整数序列,包括端点,并用空格分隔。这称为“brace expansion", and is a bashism。如您所见,所有大括号扩展都是在它们之间添加空格之前完成的。

variable=({some expansion}) 将每个展开的项目放在 array 中,${variable[index number]} 提取该索引处的值。所以你的代码有效地 returns 二进制字符串形式的数字 7。

作为附加提示:此构造相当通用,因为它适用于任何基于 n 的编号系统,最多 n = 9。以八进制为例:

$ D2O=({0..7}{0..7}{0..7}{0..7})
$ echo ${D2O[7]}
0007
$ echo ${D2O[8]}
0010
$ echo ${D2O[668]}
1234
$ echo ${D2O[4095]}
7777

可以按照 Bash shell Decimal to Binary conversion:

中解释的相同方式消除前导零
echo $((10#${D2O[7]}))
7