5

我在Bash shell 十进制到二进制转换中看到了以下代码,我想知道它是如何工作的?我尝试谷歌搜索无济于事。

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

echo ${D2B[7]}

上面的代码有什么作用?

4

2 回答 2

4

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

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

于 2017-06-24T18:16:17.120 回答
2

就像一个额外的提示:这个结构是相当通用的,因为它适用于任何基于 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 十进制到二进制转换中解释的相同方式消除前导零:

echo $((10#${D2O[7]}))
7
于 2018-04-24T08:00:17.100 回答