我想知道是否有一个简单的解决方案(sed或awk的一行命令)在bash中按内容查找索引。例如,array =(a b c d e),给定目标元素“d”,如何在不循环数组并将每个元素与目标进行比较的情况下获得其相应的数组索引3?
答案 0 :(得分:1)
尝试使用GNU grep:
array=(a b c d e)
declare -p array | grep -Po '\[\K[^\]](?=\]="d")'
或使用sed:
array=(a b c d e)
declare -p array | sed 's/.*\[\([^\[]\)\]\+="d".*/\1/'
使用grep和sed输出:
3
使用变量:
array=(a b c d e)
target="d"
index="$(declare -p array | grep -Po '\[\K[^\]](?=\]="'"$target"'")')"
echo "$index"