已知一个数组的元素,希望得到它的下标,一般做法是用遍历对比,我认为比较麻烦。想了一个比较容易的方法。

比如需要搜索元素为d的数组下标

A=(a b c d e)
SEARCH='d'
INDEX=$(printf '%s\n' "${A[@]}" | sed -n '/^'${SEARCH}'$/=')
((INDEX--))

printf '%s\n' "${A[@]}"

是把数组的每个元素变成一行

sed -n '/^'${SEARCH}'$/='

是取得行号,当然用awk的NR也可以。

数组都是从0开始计数,所以最后需要减一

((INDEX--))


如果数组已经做过操作,可能有些元素已经删除,就是说已经不连续了。

需要整理一下

unset A[2] #删除数组第3个元素
A=(${A[@]})