'array=X' 总是分配给 bash 中的第一个元素吗?

'array=X' 总是分配给 bash 中的第一个元素吗?

'array=X' 总是分配给 bash 中的第一个元素吗?如果不是,也许我需要一些“例如”来理解 man bash 页面中的以下文本:

当分配给索引数组时,如果提供了可选的括号和下标,则该索引被分配给;否则,分配的元素的索引是该语句分配的最后一个索引加一。

请。

答案1

array与 相同array[0],并且$array与 相同${array[0]}。在 Bash 中,0即使array实际上不是数组,使用索引进行引用也是有效的。但是,使用索引(零或非零)进行分配会将变量转换为数组。

$ array=foo
$ declare -p array         
declare -- array="foo"          # it's not an array
$ echo "${array[0]}"            # we can get the value through index 0
foo
$ declare -p array
declare -- array="foo"          # it's still not an array

$ array[1]=bar
$ declare -p array
declare -a array=([0]="foo" [1]="bar")  # now it is
$ echo $array                           # though this still works..
foo

手册页的部分/手动的您引用的全文是:

数组使用 形式的复合赋值进行分配 name=(value1 ... valuen),其中每个值的形式为 [subscript]=string.索引数组赋值除了字符串之外不需要任何东西。当分配给索引数组时,如果提供了可选的括号和下标,则该索引被分配给;否则,分配的元素的索引是该语句分配的最后一个索引加一。索引从零开始。

它指的是这样的作业:

array=(foo bar)
array=([0]=foo [1]=bar)

上面两个是相等的,因为索引从零开始,并且(以下)未索引的值被放入连续的索引中。同样,下面的两个赋值也是相等的:

array=([123]=foo [124]=bar)
array=([123]=foo bar)

几段之后,明确提到了索引 0 和未索引引用的相等性:

引用不带下标的数组变量相当于引用带下标的数组0。任何使用有效下标对变量的引用都是合法的,并且 bash 将在必要时创建一个数组。

相关内容