我正在 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 数组的一些一般性评论。
可以使用 引用数组的任何元素
${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