前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >shell 数组

shell 数组

作者头像
潇洒
发布2023-10-20 11:48:28
2260
发布2023-10-20 11:48:28
举报
文章被收录于专栏:石头岛

shell 也支持数组,就是写法跟平时的开发语言不太一样,反正我是觉得挺别扭。

声明数组

数组数据使用一对括号( var )包起来,就能成为数组。

代码语言:javascript
复制
arr=(10 20 30 40)
echo $arr
echo $arr[1]
echo $arr[2]

结果:

10 20

打印数组

打印数组的话要注意,直接打印数组,只会打印出第一条数数据,必须加上*#,才能全部输出。

代码语言:javascript
复制
#!/bin/bash
#数组取值

days=(one two three 4)
echo ${days}
echo ${days[0]}
echo ${days[1]}
echo ${days[@]}
echo ${days[*]}

echo "**********"
# 重置数组
names=()

names[1]=tom
names[2]=jack
echo ${names}
echo ${names[1]}
echo ${names[@]}

结果:

one one two one two three 4 one two three 4

tom tom jack

数组遍历

直接遍历

1.使用 {数组名[@]}、{数组名[#]} 均可以获得所有元素

2.带数组下标的遍历,当需要使用到数组的下标时,可以使用${!数组名[@]} 3.while循环:根据元素的个数遍历,但对于稀疏数组,可能会丢失数据

代码语言:javascript
复制
days=(one two three 4)
for day in ${days[*]}  #或${days[@]}
do
  echo $day
done

通过下标遍历,符号 !

用 for in 来遍历,取下标一般用 !。 使用 ! 时,下面例子中的 i 的值为下标。 如果要拿到值,在for中取的是${i}的值,两种写法都可以,自行选择。

代码语言:javascript
复制
#!/bin/bash
days=(one two three four)
#fou循环带下标遍历
for i in ${!days[@]}
do
  # 此刻 i 为下标,通过下标取数组的值
  echo ${days[$i]}   #这里没有 !
done

入参转数组

如果想在执行脚本的时候把所有参数当成一个数组使用,也可以这样:

代码语言:javascript
复制
test1=`${@}`
# 从第2个参数位开始
test2=`echo ${@:2}`
echo $test1
echo $test2

执行一下

sh test.sh 11 22 33 44

结果:

11 22 33 44 22 33 44

函数间数组传递

这个就比较绕了,绕在哪呢,就在传递没问题,接收的话,还是要用( )来接收,否则就只能接收到数组的第一个元素,因为在传入时,数组的所有元素被当成一个个参数传入,通过1 2 ...也可以获取到。

代码语言:javascript
复制
#!/bin/bash

test1 () {
   echo "test1 result: "
   echo "函数接收到的参数列表为: $@"   #这里是函数位置变量$@

   #将接受到的参数,定义成一个新的数组
   newarr=($@)         #位置参数,如果使用$1,只会取第一个值
   echo "新的数组的值为: ${newarr[@]}"
   for i in ${newarr[@]}; do
       echo "${i}"
   done
}

test2() {
   echo "test2 result: "
   newarr1=$1         #位置参数,如果使用$1,只会取第一个值
   newarr2=$2
   # 数组被当作元素传入
   echo $newarr1 $newarr2
}

################### main ########################

arr=(10 20 30 40 50)

echo "原始数组的值为: ${arr[@]}"

#调用函数,将数组的元素作为函数的位置变量
main () {
   test1  ${arr[@]}
   test2  ${arr[@]}
   #如果直接使用 $arr 作为位置变量,则只会将数组的第一个元素传递过去 
}
main

结果:

原始数组的值为: 10 20 30 40 50 test1 result: 函数接收到的参数列表为: 10 20 30 40 50 新的数组的值为: 10 20 30 40 50 10 20 30 40 50 test2 result: 10 20

总结

shell 的数组,函数间数组传递需要注意其它的大同小异。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-11-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 声明数组
  • 打印数组
  • 数组遍历
    • 直接遍历
      • 通过下标遍历,符号 !
      • 入参转数组
      • 函数间数组传递
      • 总结
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档