我正在尝试获取我在 for 循环中迭代的数组的索引。我正在做类似的事情
arr=( foo bar baz )
for i in $arr; do
echo "index ${#arr}";
done
Run Code Online (Sandbox Code Playgroud)
但这只会给我数组中元素的数量,而不是数组中当前值的位置。这该怎么做?
小智 7
由于似乎没有人提出明显的答案,我会的。
为什么不直接使用 C 和 Java 等主流语言中使用的数字 for 循环?
for ((i = 1; i <= $#arr; i++)); do
echo "Index: $i, value: ${arr[i]}"
done
Run Code Online (Sandbox Code Playgroud)
或者,甚至更短(更慢,并且可能是大数组的内存猪):
for i in {1..$#arr}; do
echo "Index: $i, value: ${arr[i]}"
done
Run Code Online (Sandbox Code Playgroud)
您可以使用数组文字匹配以及返回当前索引的标志来执行此操作:
arr=( foo bar baz )
for i in $arr; do
echo "index ${arr[(ie)$i]}";
done
Run Code Online (Sandbox Code Playgroud)
该i
标志返回索引,并且该e
标志修改i
行为以字面匹配字符串。表达式为: for arr 匹配字符串 $i 按字面意思返回索引。此方法的缺点是,只有当数组的所有元素都是唯一的时,您才可以信任它。否则你需要使用某种计数器。