已知一个数组的元素,希望得到它的下标,一般做法是用遍历对比,我认为比较麻烦。想了一个比较容易的方法。
比如需要搜索元素为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[@]})