bash shell
find_idx()
{
[ $# -eq 2 ] || return -1
local a i
eval a=(\ "\${$1[@]}\ ") //这个怎么理解?
i=0
for v in "${a[@]} " //这个怎么理解?
do
[ "$v " = "$2 " ] && echo $i && return
let "i++ "
done
echo -1
}
------解决方案--------------------find_idx()
{
[ $# -eq 2 ] || return -1
local a i
eval a=(\ "\${$1[@]}\ ") #//转义,使a=数组名.$1为传入的参数名,${$1[@]}是列出数组的所有成员.\${$1[@]},是不扩展开数组,(\ "\${$1[@]}\ ")可用改成( "\${$1[@]} "),意思是把数组当成一个一个成员,
而不是扩展成一个字符串赋值给数组a.eval是执行后面的参数.
echo "$a " aaaaaaa
i=0
for v in "${a[@]} " ;#遍历数组 . "${a[@]} "的意思就是扩展开a数组的所有成员.
do
echo $v==$2
[ "$v " = "$2 " ] && echo $i && return
let "i++ "
done
echo -1
}
c()
{
b[0]= "aa " #定义个数组
b[1]= "bb "
b[2]= "cc "
find_idx b "bb " #函数的第一个参数为数组名,第二个参数为要查找的数据
}
c