Shell 数组

Shell 数组

数组中可以存放多个值。Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小(与 PHP 类似)。

与大部分编程语言类似,数组元素的下标由0开始。

Shell 数组用括号来表示,元素用"空格"符号分割开,语法格式如下:

array_name=(value1 value2 ... valuen)

实例

#!/bin/bash# author:菜鸟教程# url:www.runoob.commy_array=(A B "C" D)

我们也可以使用下标来定义数组:

array_name[0]=value0array_name[1]=value1array_name[2]=value2

读取数组

读取数组元素值的一般格式是:

${array_name[index]}

实例

#!/bin/bash# author:菜鸟教程# url:www.runoob.commy_array=(A B "C" D)echo "第一个元素为: ${my_array[0]}"echo "第二个元素为: ${my_array[1]}"echo "第三个元素为: ${my_array[2]}"echo "第四个元素为: ${my_array[3]}"

执行脚本,输出结果如下所示:

$ chmod +x test.sh $ ./test.sh第一个元素为: A第二个元素为: B第三个元素为: C第四个元素为: D

获取数组中的所有元素

使用@ 或 * 可以获取数组中的所有元素,例如:

#!/bin/bash# author:菜鸟教程# url:www.runoob.commy_array[0]=Amy_array[1]=Bmy_array[2]=Cmy_array[3]=Decho "数组的元素为: ${my_array[*]}"echo "数组的元素为: ${my_array[@]}"

执行脚本,输出结果如下所示:

$ chmod +x test.sh $ ./test.sh数组的元素为: A B C D数组的元素为: A B C D

获取数组的长度

获取数组长度的方法与获取字符串长度的方法相同,例如:

#!/bin/bash# author:菜鸟教程# url:www.runoob.commy_array[0]=Amy_array[1]=Bmy_array[2]=Cmy_array[3]=Decho "数组元素个数为: ${#my_array[*]}"echo "数组元素个数为: ${#my_array[@]}"

执行脚本,输出结果如下所示:

$ chmod +x test.sh $ ./test.sh数组元素个数为: 4数组元素个数为: 4---------------------------------------------------------------------------数组的值也可以写入变量。例如:A=1my_array=($A B C D)echo "第一个元素为: ${my_array[0]}"echo "第二个元素为: ${my_array[1]}"echo "第三个元素为: ${my_array[2]}"echo "第四个元素为: ${my_array[3]}"输出为:第一个元素为: 1第二个元素为: B第三个元素为: c第四个元素为: D飞雪敛梦   飞雪敛梦  409***215@qq.com3年前 (2017-09-20)   leocll  leo***@qq.com16根据数组元素索引获取该数组元素值时,数组下标可为变量。例如:arr=(a b c d)i=2echo ${arr[i]}输出为:cleocll   leocll  leo***@qq.com3年前 (2017-09-28)   百晓生_沙  zhe***ufu21@163.com33看数组的时候,觉得遍历数组用的比较多,所以自己试着写了写遍历,同时试了一下在SHELL脚本中的变量自增几个写法,在就新手学习的时候注意一下 [ 和 $ 之间要有空格,没有空格运行会报错,新手可能不太注意这一点,我开始就没注意到~~~~示例如下:#!/bin/bashmy_arry=(a b "c","d" abc)echo "-------FOR循环遍历输出数组--------"for i in ${my_arry[@]};do  echo $idoneecho "-------::::WHILE循环输出 使用 let i++ 自增:::::---------"j=0while [ $j -lt ${#my_arry[@]} ]do  echo ${my_arry[$j]}  let j++doneecho "--------:::WHILE循环输出 使用 let  "n++ "自增: 多了双引号,其实不用也可以:::---------"n=0while [ $n -lt ${#my_arry[@]} ]do  echo ${my_arry[$n]}  let "n++"doneecho "---------::::WHILE循环输出 使用 let m+=1 自增,这种写法其他编程中也常用::::----------"m=0while [ $m -lt ${#my_arry[@]} ]do  echo ${my_arry[$m]}  let m+=1doneecho "-------::WHILE循环输出 使用 a=$[$a+1] 自增,个人觉得这种写法比较麻烦::::----------"a=0while [ $a -lt ${#my_arry[@]} ]do echo ${my_arry[$a]} a=$[$a+1]done百晓生_沙   百晓生_沙  zhe***ufu21@163.com3年前 (2017-12-05)   shita09  shi***9@sina.com6Bourne shell(原生kernel下)下不支持数组,只能通过模拟来实现类似数组功能。实例 1#!/bin/sh#注意不是/bin/bashecho "##############使用eval函数###############"echo "使用参考:"echo "http://www.runoob.com/linux/linux-comm-eval.html"eval a1=bilieval a2=nicoeval a3=yamafor i in 1 2 3 ; do  eval echo "\$a$i"done输出结果:##############使用eval函数###############使用参考:http://www.runoob.com/linux/linux-comm-eval.htmlbilinicoyama实例 2#!/bin/sh#注意不是/bin/bashecho "##########################################"echo "指令参考:"echo "http://www.runoob.com/linux/linux-comm-expr.html":<<!根据用户输入的一句话来定义数组并遍历数组元素!echo "输入字符串(以空格分开):"read stri=0for word in $str; do    i=`expr $i + 1`    eval a$i="$word"    eval echo "数组的第 $i 个元素为: \$a$i"done输出结果:##########################################指令参考:http://www.runoob.com/linux/linux-comm-expr.html输入字符串(以空格分开):runoob google taobao数组的第 1 个元素为: runoob数组的第 2 个元素为: google数组的第 3 个元素为: taobaoshita09   shita09  shi***9@sina.com2年前 (2018-11-21)   陈东谱  232***8881@qq.com10用 for 循环遍历数组:#!/bin/bash  arr=(1 2 3 4 5 6 7 8 9 10)  for a in ${arr[*]}  do    echo $a  done陈东谱   陈东谱  232***8881@qq.com1年前 (2019-10-27)   Vivienne  122***9485@qq.com1字符串转数组:#!/bin/bashwords="aaa bbb ccc"#字符串转数组,空格是分隔符array=(${words// / })#打印数组最后一个成员echo ${array[${#array[*]}-1]}#打印数组长度echo ${#array[*]}#字符串不转换为数组,在循环实现以空格为分隔符打印每个成员for word in ${words}; do    echo ${word}done运行结果:ccc3aaabbbccc
(0)

相关推荐

  • 批处理数组

    数组类型并没有明确定义为批处理脚本中的类型,但可以实现. 在批处理脚本中实现数组时需要注意以下几点. 数组中的每个元素都需要用set命令来定义. for循环将需要遍历数组的值. 创建一个数组 一个数组 ...

  • 学会这两招,PLC编程也可以批量化定义变量-数组、结构

    数组 简单的说,就是多个相同类型数据一定顺序排列的集合,使用一个名字命名,并通过编号的方式对这些数据统一管理. 在PLC编程过程中,我们也经常遇到同类型的变量需要定义,例如10台电机的电流值,如果不使 ...

  • C语言0数组/柔性数组使用介绍

    前言: 我自己在这篇文章下面做了一些回复. 现在我想结合我自己的理解,解释一下这个 char[0] C语言柔性数组的问题. 作者:良知犹存 转载授权以及围观:欢迎关注微信公众号:羽林君 或者添加作者个 ...

  • 【C语言核心基础】基本运算、变量、数组、指针、函数、结构体...

    C 语言基础 // 引入头文件.里面包含了重要的 printf. #include <stdio.h> // 入口函数. // 参数一指输入的参数个数,参数二保存了所有参数. // 返回值 ...

  • 在PHP中灵活使用foreach+list处理多维数组

    先抛出问题,有时候我们接收到的参数是多维数组,我们需要将他们转成普通的数组,比如: $arr = [ [1, 2, [3, 4]], [5, 6, [7, 8]],]; 我们需要的结果是元素1变成1, ...

  • VB中怎样对一个二维数组的行进行操作

    通常,数学上的行列式或者矩阵,用二维数组来存放数据,二维数组的第1维,就是映射矩阵的行,二维数组的第2维,就是映射矩阵的列. 例如: dim d(1 To 3,1 To 4) As Integer 对 ...

  • 数组及Arrays类

    数组是相同类型的有序集合 数组的下标是从0开始的,所以数组中的最大下标为该数组长度减1 初始化数组的三种方式: //动态初始化:先创建后赋值int[] name=new int[10];//确立了数组 ...

  • 如何将二维数组作为函数的参数传递

    今天写程序的时候要用到二维数组作参数传给一个函数,我发现将二维数组作参数进行传递还不是想象得那么简单里,但是最后我也解决了遇到的问题,所以这篇文章主要介绍如何处理二维数组当作参数传递的情况,希望大家不 ...

  • Python 和 Shell 语法终于可以互通了

    顶级架构师 1篇原创内容 Official Account 点击上方 '编程技术圈'关注, 星标或置顶一起成长 后台回复"大礼包"有惊喜礼包! 每日英文 Some happened ...

  • Excel数组入门之计算规则

    问题:{1,2,3;4,5,6} 是几行几列? 如果这个问题,你能回答出来,那么说明你对水平和垂直数组有了清晰的认识.如果没有也没有关系,下面我们就带大家先认识一下,然后再谈计算规则! 常量数组写法 ...