bash shell数组使用总结

本文为原创博文,转发请注明原创链接https://www.cnblogs.com/dingbj/p/10090583.html 

数组的概念就不多说了,大家都懂!

shell数组分为普通数组和字典数组,今天只说普通数组。

定义数组

像很多脚本语言一样,shell变量不区分类型,对于普通数组,可申明也可以不申明:

如果习惯使用申明,就使用declare 命令申明

  例如:declare -a myarray

数组初始化在赋值语句的等号右侧,紧挨着用一对括号表示数组,数组中元素之间使用“空格”分隔。

例如:

myarray=()  #定义一个空数组

myarray=(1 2 3 4 5)   #全部元素为数字

myarray=(one two three four five)  #全部元素为字符串

myarray=(1 two 3 three 4 five)  #元素由数值和字符串构成

myarray=(1 two 3 “a phrase” 5 now)

当然也可以直接为数组元素赋值来定义数组

例如:

myarray[0]=1

myarray[2]=test

myarray[3]="a phrase"

....

引用操作数组

  既然数组是一个变量,当然引用时也得使用$符开头,但和普通标量变量不同,引用整个数组,需要使用${arr_name[*]}或${arr_name[@]}形式,否则使用$arr_name或者${arr_name}只会得到第一个元素。同样,和标量变量一样,数组变量也可以进行长度、分片、替换等操作,如下:

  用下标读取某个元素的值

  arr_element2=${arr_name[2]},即形式:${数组名[下标]}

  用#获取数组长度:${#数组名[@]} 或${#数组名[*]}

  arr_len=${#arr_name[*]}或${#arr_name[@]}

       用#获取某元素值的长度

  arr_elem_len=${#arr_name[index]}   #index为数组下标索引

  删除数组

    删除数组某个元素:unset arr_name[index]

    删除整个数组:unset arr_number

  数组分片访问

    分片访问形式为:${数组名[@或*]:开始下标:偏移长度}

    例如:

        arr_name=(1 2 3 test go now)

           echo ${arr_name[@]:1:2},将输出2 3

    ${arr_name[@]:1:2},这里分片访问从下标1开始,元素个数为2。

  模式替换

    格式为:${数组名[@或*]/模式/新值}

    例如:echo ${arr_name[@]/now/past},将输出1 2 3 test go past

  数组的遍历

    通常我们使用for命令遍历数组,遍历数组时对数组引用通常需要加上双引号,这样才能正确遍历含有空格字符串的元素

    例如:定义了数组arr_name=(1 2 3 test go now "a whole sentence"),遍历时 输出如下:

    如果使用${arr_name[*]}格式引用数组进行遍历,将得到一个数组元素以空格分隔的字符串

   

   为什么遍历数组时要加双引号?

    无论使用@还是*的格式引用数组,不存在含空格的元素时,加不加引号对数组遍历不会有什么问题,

  但一旦元素中含有空格,将不能得到预期效果,在实际使用时,元素的值通常时变量替换得到的,这不能保证

  是否含有空格,因此,为了稳妥起见,建议用引号括住数组变量,下面时不加引号的表现:

    例如:最后一个元素的值是a whole sentence字符串,包含有空格,但遍历后以空格被拆分了,显然这不是我们想要的结果

原文地址:https://www.cnblogs.com/dingbj/p/bash_array.html

时间: 2024-10-12 23:28:22

bash shell数组使用总结的相关文章

bash shell数组

bash shell中,对于数组的处理是一个容易出错的地方. 数组:    变量:存储单个元素的内存空间:    数组:存储多个元素的连续的内存空间:        数组名        索引:编号从0开始,属于数值索引:        注意:索引也可支持使用自定义的格式,而不仅仅是数值格式:        bash的数组支持稀疏格式:就是不在连续的内存空间中存放每一个数组元素 声明数组:    declare -a ARRAY_NAME    declare -A ARRAY_NAME: 关联

bash shell数组变量

一.定义数组变量 1.语法 (1)ArrayName=(parameter1 parameter2 ...) 例1.定义一个数组名为name,值为claire,obama,george的数组 name=(claire obama george ) (2)ArrayName=( parameter1 parameter2 ... ) 同样我们将例1改成第二种方式 name=( claire obama george ) 二.函数的访问 (1)下标访问 ${ArrayName[0]}   例1中就是

bash shell基础特性之三(数组)

bash shell基础特性之三(数组) 一.数组定义 数组指连续的多个独立内存空间,每个内存空间相当于一个变量. bash shell只支持一维数组,但参数个数没有限制. 数组元素:数组名+索引(从0开始编号) 声明数组:declare -a ARRAR_NAME(其实不用声明,按数组方式直接赋值给变量即可,BASH就知道那是数组) 关联数组:declare -A ARRAY_NAME 数组元素的赋值:一次赋值全部元素.指定索引进行赋值.一次只赋值一个元素 (1) array=(var1 va

bash shell 中数组使用举例

bash shell 中数组使用举例 一 背景 让我们先来看一个 shell 脚本的执行过程及结果: [[email protected] ~]$ sh array.sh N2 N3 N4 The elements of this array 2-4 are: N2 N3 N4 N1 is in array. N2 is in array. N3 is in array. N4 is in array. The original array is as follows: N1 N2 N3 N4

bash shell环境变量

$* 将所有命令行参数当做单个文本值包含 [email protected] 将所有命令行参数当做独立的文本值包含 $# 命令行参数数目 $? 最近使用的前端进程的退出状态码 $- 当前命令选项标记 $$ 当前shell的进程ID(PID) $! 最近执行的后台进程PID $0 来自命令行的命令名称 $_ shell的绝对路径名 BASH 用来调用shell的全文件名 BASH_ARGC 当前子函数中的参数数目 BASH_ARGV 含有所有指定命令行参数的数组 BASH_COMMAND 当前正在

bash shell学习-基础 (笔记)

When you hoist the sails to cross the sea, you willride the wind and cleave the waves. "长风破浪会有时,直挂云帆济沧海" 参考资料:鸟哥的Linux私房菜 基础学习篇(第三版) 一.认识shell 1.什么是shell shell是一种“提供使用者界面”来实现用户与内核通信的软件(命令解释器) 2.为什么要学习shell ①命令行界面的shell在各大Linux发行版中都一样: ②远程管理时命令行界

Bash Shell 小试牛刀

一.终端打印 [[email protected] ~]# echo welcome to bash! welcome to bash! [[email protected] ~]$ echo 'welcome to bash!' welcome to bash! [[email protected] ~]$ echo "welcome to bash\!" welcome to bash\! (注意,双引号内不能直接用特殊符号,需要用转义符\) [[email protected]

8.11_Linux之bash shell脚本编程入门篇(一)

什么是bash shell脚本编程? 答:Linux里面有多种shell,而CentOS和redhat的默认shell是bash shell.至于shell脚本,这个跟windows操作系统里面的批处理文件有点像(.bat的文件).不知道大家还是否记得Linux的哲学思想吗?其中有那么两点点:由众多目的的单一应用程序组成:一个程序只做一件事,且做好:组合目的的单一的小程序完成复杂的任务.我觉得shell脚本编程就很好的体现了这个哲学思想.shell脚本利用shell的功能缩写的一个"程序&quo

系统管理中 bash shell 脚本常用方法总结

FROM: http://www.cnblogs.com/hunterfu/archive/2010/02/23/1672129.html 在日常系统管理工作中,需要编写脚本来完成特定的功能,编写shell脚本是一个基本功了!在编写的过程中,掌握一些常用的技巧和语法就可以完成大部分功能了,也就是2/8原则. 1. 单引号和双引号的区别 单引号与双引号的最大不同在于双引号仍然可以引用变量的内容,但单引号内仅是普通字符 ,不会作变量的引用,直接输出字符窜.请看如下例子: [[email protec