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

时间:2017-06-24 16:24:38

标签: arrays linux bash brace-expansion

我在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]}

上面的代码是做什么的?

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

正如另外一个提示:这个结构是相当通用的,因为它适用于任何基于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