1. 正常表达——硬编码索引

1. 正常表达——硬编码索引

我正在 MacOSX 上使用终端。

我读了这个入口介绍一下unix数组。我尝试按其方式访问数组,但失败了:

a=(1,2) && echo "${a[0]}"

这是输出:

1,2

我所期望的是1

我应该怎么办?

答案1

a=('1' '2') && echo "${a[0]}"这样会更好。

在您的版本中,您仅创建了一个包含值“1,2”的单元素数组。

答案2

访问索引数组中的元素时要记住三件事:

1. 正常表达——硬编码索引

arr=(one two three)
element_0="${arr[0]}"

2. 普通表达式——索引存储在变量中

arr=(it is cool to write readable code)
for ((i=0; i < ${#arr[@]}; i++)); do
    current_element=${arr[i]} # note, no '$' necessary before i
done

3.涉及数组元素的算术表达式

arr=(100 150 350)
((sum_of_first_two = arr[0] + arr[1])) # no need for '{ }'

答案3

虽然你的实际的问题与问题标题所指示的不同(您访问数组项的方法是正确的),以下是有关如何使用 bash 数组的一些一般性评论。

来自Bash 参考手册

可以使用 引用数组的任何元素${name[subscript]}。需要使用大括号以避免与 shell 的文件名扩展运算符发生冲突。

...

下标被视为必须计算为数字的算术表达式。

这意味着$下标中没有必要。

如果用于引用索引数组元素的下标计算结果为小于零的数字,则它将被解释为相对于大于数组最大索引的 1,因此负索引从数组末尾开始倒数,并且索引 -1 指的是最后一个元素。

例如:

declare -i i=1 # -i declares integer
${arr[i*2]} 
${arr[-1]} #returns last element
${arr[0]}  #first element is at index 0

相关内容