【发布时间】:2017-11-28 00:58:47
【问题描述】:
我在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]}
上面的代码做了什么?
【问题讨论】:
-
查找
brace expansion和bash arrays -
这将创建一个带有
00000000 00000001 00000010 ... 11111101 11111110 11111111和bash‘s brace 扩展的数组。数组 D2B 中的位置代表它的十进制值。 -
对了,这个也是可以的
D2B=({0,1}{0,1}{0,1}{0,1}{0,1}{0,1}{0,1}{0,1}) -
为了澄清起见,在这种情况下,大括号扩展具有列出 8 位可以具有的所有 256 个排列的效果(即从 00000000 到 11111111)。因为它是在括号内完成的,所以结果被保存到一个数组中,然后分配给变量 D2B。 echo 命令回显数组的第七个元素。因为排列是有序的,所以第七个元素是 00000111,它是十进制数 7 的二进制。要查看数组中的所有元素,请使用
echo "${D2B[@]}"(双引号很重要)。 -
其实我认为如果你选择将大括号展开生成的序列解释为大端序,第七个元素才等于“7”。抨击它只是吐出可预测的字符序列(而不是位)。当它们被认为是大端时,它扩展排列的方式是有序的,这只是一个快乐的巧合。我猜如果您使用 {1,0},它们会以相反的顺序列出,如果您使用
tac(即反向猫),您可以将它们转换为 little-endian。但是如果没有进一步的转换,您仍然无法将其保存为二进制文件。
标签: arrays linux bash brace-expansion