数组

和其他编程语言一样,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. isolate 通信

    main.dart import 'package:flutter/material.dart'; import 'package:flutter_isolate/flutter_isolate.da ...

  2. kubernetes第十章--ConfigMap 管理配置

  3. linux 下 shell脚本报错:-bash: ./build.sh: /bin/sh^M: bad interpreter: No such file or directory

    主要原因是build.sh是在windows下编辑然后上传到linux系统里执行的..sh文件的格式为dos格式.而linux只能执行格式为unix格式的脚本. 我们可以通过vi编辑器来查看文件的fo ...

  4. Oracle 11g 物理存储结构

    Oracle 系统的物理存储结构比较具体和直观,它用来描述 Oracle 数据在磁盘上的物理组成情况.Oracle 系统的数据在逻辑上存储在表空间中,而在物理上存储在表空间所包含的物理文件(即数据文件 ...

  5. arm9的时钟和定时器

    时钟 两种能够提供时钟的方式: 1) 晶振 2) PLL(也就是锁相环):通用PLL需啊一个晶振,和对晶体特定频率分频或倍频的锁相环电路. 学习ARM9时钟的四步: 1) 晶振:12MHZ 2) 有多 ...

  6. netaddr网络地址工具python

    print("==========1==========") from netaddr import IPNetwork # IPNetwork('192.168.7.80/30' ...

  7. WebService知识点

    Web Services简介: 什么是Web Services? Web Services 是应用程序组件 Web Services 使用开放协议进行通信 Web Services 是独立的(self ...

  8. QT--初识

    一.组成QT的基本模块 二.创建一个简单工程 1.工程结构介绍 .pro 文件 QT += core gui # 包含的模块 greaterThan(QT_MAJOR_VERSION, ): QT + ...

  9. 配置logback日志管理的时候

    在使用logback时候,需要引入 thymeleaf的配置 thymeleaf: suffix: .html check-template-location: true encoding: UTF- ...

  10. 《奋斗吧!菜鸟》 第九次作业:Beta冲刺 Scrum meeting 1

    项目 内容 这个作业属于哪个课程 任课教师链接 作业要求 https://www.cnblogs.com/nwnu-daizh/p/11056511.html 团队名称 奋斗吧!菜鸟 作业学习目标 掌 ...