数组

和其他编程语言一样,Shell 也支持数组。数组(Array)是若干数据的集合,其中的每一份数据都称为元素(Element)。

Shell 并且没有限制数组的大小,理论上可以存放无限量的数据。和 C++JavaC# 等类似,Shell 数组元素的下标也是从 0 开始计数。

获取数组中的元素要使用下标[ ],下标可以是一个整数,也可以是一个结果为整数的表达式;当然,下标必须大于等于 0。

遗憾的是,常用的 Bash Shell 只支持一维数组,不支持多维数组。一对圆括号表示数组,数组元素之间用空格符号分割

数组定义

root@master:~# arr=(   )   //注意,赋值号=两边不能有空格,必须紧挨着数组名和数组元素。

 root@master:~# echo $arr   //默认输出数组的第一个元素
  1

数组里面可以包含不是同一类型的数据:

root@master:~# arr=(  "my name is yjt")

添加数组元素:

root@master:~# arr[]=
root@master:~# echo ${arr[]}

给特定的元素赋值

root@master:~# arr1=([]= []= []=)
root@master:~# echo ${arr1[]}

数组长度、元素与删除

获取数组元素:用${数组名[下标]} 得到数组元素(下标从0开始), 下标为*或者@得到整个数组内容

语法格式:${array_name[index]}
其中,array_name 是数组名,index 是下标
示例如下:
root@master:~# echo ${arr1[]} //获取单个元素 root@master:~# echo ${arr1[*]} //获取所有元素
6

root@master:~# echo ${arr1[@]}
  2 4 6

删除:通过unset数组[下标]可以清除相应的元素,不带下标则清除全部数据

root@master:~# echo ${arr1[]}

root@master:~# unset arr1[]
root@master:~# echo ${arr1[]} root@master:~# unset arr1
root@master:~# echo ${arr1[*]}

长度:用${#数组名[@或*]} 可以得到数组长度

root@master:~# arr=(  )
root@master:~# echo ${#arr[*]}

获取数组元素的范围

直接通过 ${数组名[@或*]:起始位置:长度} 获取数组给定范围内元素,返回字符串,中间用空格分开

root@master:~# echo ${arr[*]::}
3

root@master:~# echo ${arr[@]:1:2}
  2 3

 

替换

${数组名[@或*]/查找字符/替换字符} 该操作不会改变原先数组内容,如果需要修改,可以看上面例子

root@master:~# echo ${arr[*]}

root@master:~# echo ${arr[*]//}
  

关联数组

Bash支持关联数组,它可以使用字符串作为数组索引,有时候采用字符串索引更容易理解。

定义关联数组

声明某个变量为关联数组

root@master:~# declare -A arr_test

将元素添加到关联数组‘

方法一:利用内嵌索引-值列表的方法
root@master:~# declare -A arr_test
root@master:~# arr_test=([name]=yjt [age]=)
方法二:使用独立的索引-值进行赋值

root@master:~# declare -A arr_test1
  root@master:~# arr_test1[name]=yjt
  root@master:~# arr_test1[age]=22

列出数组索引

每一个数组都有一个索引用于查找。使用${!数组名[@或者*]}获取数组的索引列表

root@master:~# echo ${arr_test[*]}
yjt
root@master:~# echo ${!arr_test[*]}
name age

获取所有的键值对

#!/bin/bash
declare -A arr_yjt
arr_yjt=([name]=yjt [age]=)
for key in ${!arr_yjt[*]}
do
echo "$key ---> ${arr_yjt[$key]}"
done

保存文件到yjt.sh

执行脚本文件:

root@master:~# bash  yjt.sh
name ---> yjt
age --->

Linux 之数组的更多相关文章

  1. Linux Shell数组常用操作详解

    Linux Shell数组常用操作详解 1数组定义: declare -a 数组名 数组名=(元素1 元素2 元素3 ) declare -a array array=( ) 数组用小括号括起,数组元 ...

  2. linux C 数组操作

    /****************************************************************** * linux C 数组操作 * 声明: * 本文为解决陈颖奇遇 ...

  3. Linux 中数组的使用

    Linux中数组本人可能用的相对较少,但是会经常遇见,也容易忘记,就顺便记录下来吧 数值类型的数组:一对括号表示数组,数组中元素之间使用“空格”来隔开 arr=(1 2 3 4 5) 字符串类型数组: ...

  4. linux C 数组与指针

    linux C 数组与指针 一.数组 数组是同一数据类型的一组值:属于引用类型,因此数组存放在堆内存中:数组元素初始化或给数组元素赋值都可以在声明数组时或在程序的后面阶段进行. 定义一维数组的一般格式 ...

  5. 转:linux shell 数组建立及使用技巧

    linux shell在编程方面比windows 批处理强大太多,无论是在循环.运算.已经数据类型方面都是不能比较的. 下面是个人在使用时候,对它在数组方面一些操作进行的总结. 1.数组定义 [che ...

  6. 转载-Linux Shell 数组建立及使用技巧

    转载自:http://www.cnblogs.com/chengmo/archive/2010/09/30/1839632.html 如侵犯版权,请联系我删除 linux shell在编程方面比win ...

  7. linux shell 数组建立及使用技巧

    参考网址:http://www.cnblogs.com/chengmo/archive/2010/09/30/1839632.html linux shell在编程方面比windows 批处理强大太多 ...

  8. linux shell 数组的使用

    引言 在Linux平台上工作,我们经常需要使用shell来编写一些有用.有意义的脚本程序.有时,会经常使用shell数组.那么,shell中的数组是怎么表现的呢,又是怎么定义的呢?接下来逐一的进行讲解 ...

  9. Linux Shell 数组

    shell 数组一般都是一维数组. 1. 数组的声明 declare -a arr 该命令将声明一个数组arr,实际上不声明也可以直接定义数组. 2. 数组的初始化 arr=(1 2 3):该命令定义 ...

  10. linux shell数组

    from: http://www.jb51.net/article/34322.htm bash shell只支持一维数组,但参数个数没有限制. 声明一个数组:declare -a array(其实不 ...

随机推荐

  1. Hadoop之MapReduce流程

    hadoopMapReduce 1. MapReduce流程 2. Shuffle流程 1. MapReduce流程 MapReduce流程 切片: 对数据进行逻辑划分,默认大小是一个block块大小 ...

  2. opencv 源码分析 CUDA可分离滤波器设计 ( 发现OpenCV的cuda真TM慢 )

    1. 主函数 void SeparableLinearFilter::apply(InputArray _src, OutputArray _dst, Stream& _stream) { G ...

  3. 【转载】Asp.net网站安全:去除网站根目录下的备份文件防止代码泄露

    很多网站运维人员在更新网站版本的时候,喜欢直接在网站目录文件夹中直接压缩原来的网站文件,如果这个备份压缩文件没有移动出去,这样是非常不安全的,有些网站攻击者可能会尝试访问你网站下有没有对应名字的压缩备 ...

  4. Fortify漏洞之Portability Flaw: Locale Dependent Comparison

    继续对Fortify的漏洞进行总结,本篇主要针对 Portability Flaw: Locale Dependent Comparison 漏洞进行总结,如下: 1.Portability Flaw ...

  5. 【Python】单例模式

    单例 class MusicPlayer(object): instance = None def __new__(cls, *args, **kwargs): if cls.instance is ...

  6. 微信小程序---客服消息接口调用,拿来即用

    如果本文对你有用,请爱心点个赞,提高排名,帮助更多的人.谢谢大家!❤ 如果解决不了,可以在文末进群交流. 如果对你有帮助的话麻烦点个[推荐]~最好还可以follow一下我的GitHub~感谢观看! 在 ...

  7. angularcli 第三篇(数据循环*ngFor、条件判断*ngIf)

    1.数据循环 *ngFor (1)普通循环 <ul> <li *ngFor = "let item of list" > {{ item }} </l ...

  8. 使用Cloudera Manager搭建HBase环境

    使用Cloudera Manager搭建HBase环境 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.使用CM安装HBase服务 1>.进入CM服务安装向导 2>. ...

  9. 桂电深信服CTF之MSC真假压缩包

    真假压缩包-复现(吐槽一句,脑洞真特么大) 先从虚假的入手,一开始猜测虚假的是伪加密,后面也确实是 后面打开压缩包,是一个txt文件 一眼可以看出来是RSA,算出来明文是5(于是就在这里卡了两天,一直 ...

  10. c++第四次作业

    继承与派生--访问控制 一.知识要点 (一)知识回顾: 基类的成员可以有public.protected.private三种访问属性.基类的自身成员可以对基类中任何一个其他成员进行访问,但是通过基类的 ...