'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 将在必要时创建一个数组。