shell中如何在函数内计算数组长度?

asbsassdsad 2014-10-07 06:22:30
rt



如上图红框的地方,我是把数组里的值当作参数传进去的,
echo $*或$@或${thisarray
  • }都可以把所有元素输出来,但就不能好像在函数外那样${#thisarray
  • }获取数组长度

    在函数里应该怎么做才可以呢?

    另外我知道用for ... in可以遍历数组,但我想试下用for
  • (()),就遇到这种情况了……还望各大神教下……我刚接触shell不久
...全文
389 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
计算数组长度本来就是用${array[@]}的,是你的问题搞错了 你想问的是函数参数传递的是数组如何获得长度吧? 首先看你的调用方式:
testit ${myarray
  • }
这句话等同于
testit 1 2 3 4 5
看出问题来了吗,你传递的是多个参数,根本就不是一个数组啊! 如果在testit中还想把它还原成数组那就应该做么做:
local thistarray=($@)
原因是
$@=1 2 3 4 5
;加一个括号就相当于数组了
侑子的小伙伴 2014-10-08
  • 打赏
  • 举报
回复
需要加上()
local thisarray=($*)
傲雪星枫 2014-10-07
  • 打赏
  • 举报
回复

#!/bin/bash

function testit(){

    local thisarray=($1)

    echo "array length:"${#thisarray[@]}

    sum=0

    for (( i = 0; i < ${#thisarray
  • }; i++
  • )) do echo "thisarray[$i]:"${thisarray[$i]} sum="sum="$(($sum + ${thisarray[$i]})) done echo $sum } myarray=(1 2 3 4 5) testit "${myarray
  • }" exit 0
array length:5 thisarray[0]:1 thisarray[1]:2 thisarray[2]:3 thisarray[3]:4 thisarray[4]:5 sum=15
asbsassdsad 2014-10-07
  • 打赏
  • 举报
回复
另外,在函数中如何获取数组中某个值

23,120

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧