日期:2014-05-16  浏览次数:20753 次

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