概述

之前梳理的博文 Shell 数组
http://blog.csdn.net/yangshangwei/article/details/52372608


数组是shell脚本非常重要的组成部分,它借助索引将多个独立的数据存储为一个集合。

普通数组只能使用整数作为数组索引。
Bash也支持关联数组,它可以使用字符串作为数组索引。

在很多情况下,采用字符串式索引更容易理解,这时候关联数组就派上用场了。

在这里,我们会介绍普通数组和关联数组的用法。

Bash从4.0版本之后才开始支持关联数组。

[root@entel2 ~]# bash -version
GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
[root@entel2 ~]# 

栗子详解

[root@entel1 Templates]# cat arr.sh
#!/bin/bash

#第一种定义方法
array_var=(1 2 x g j)
#数组的值存储在以0为起始索引的连续位置上
echo ${array_var[0]}
echo ${array_var[1]}
echo ${array_var[2]}
echo ${array_var[3]}
echo ${array_var[4]}#第二种定义方法
arr[0]="xiao"
arr[1]="xiao"
arr[2]="1111111"
echo ${arr[0]}
echo ${arr[1]}
echo ${arr[2]}#打印特定索引的数组元素内容
echo ${array_var[0]}index=5
echo ${array_var[index]}#以清单的形式输出数组中的所有值
echo ${array_var[*]}
echo ${arr[*]}echo ${array_var[@]}
echo ${arr[@]}#打印数组的长度
echo ${#array_var[*]}echo ${#arr[*]}
[root@entel1 Templates]# ./arr.sh
1
2
x
g
j
xiao
xiao
1111111
11 2 x g j
xiao xiao 1111111
1 2 x g j
xiao xiao 1111111
5
3

关联数组

关联数组从Bash 4.0版本开始被引入。借助散列技术,关联数组成为解决很多问题的有力工具。接下来就让我们一探究竟。

定义关联数组

在关联数组中,我们可以用任意的文本作为数组索引。首先,需要使用声明语句将一个变量名声明为关联数组。像下面这样:

$ declare -A ass_array

声明之后,可以用两种方法将元素添加到关联数组中。

  •  利用内嵌“索引-值”列表的方法,提供一个“索引-值”列表:
$ ass_array=([index1]=val1 [index2]=val2)
  •  使用独立的“索引-值”进行赋值:
$ ass_array[index1]=val1
$ ass_array'index2]=val2

举个例子,试想如何用关联数组为水果制定价格:

[root@entel1 Templates]# cat arr2.sh
#!/bin/bash

#定义关联数组
declare -A fruits_value
fruits_value=([apple]='$100' [orange]='$150')echo "apple costs ${fruits_value[apple]}"
echo orange costs ${fruits_value[orange]}
[root@entel1 Templates]# ./arr2.sh
apple costs $100
orange costs $150

列出数组索引

每一个数组元素都有一个索引用于查找。普通数组和关联数组具有不同的索引类型。

我们可以用下面的方法获取数组的索引列表:

$ echo ${!array_var[*]}

也可以使用:

$ echo ${!array_var[@]

以先前提到的fruits_value数组为例,运行如下命令:

$ echo ${!fruits_value[*]}
orange apple

对于普通数组,这个方法同样可行。

Shell脚本攻略05-数组和关联数组相关推荐

  1. LINUX SHELL脚本攻略笔记[速查]

    LINUX SHELL脚本攻略笔记[速查] Linux Shell脚本攻略笔记[速查] 资源 shell script run shell script echo printf 环境变量和变量 pgr ...

  2. Linux Shell脚本攻略 读书笔记

    内容目录: 嗨,Echo一下 给终端来点颜色 shell的控制结构 算术比较 目录操作 网站下载 tar 归档工具 rsync 备份系统快照 ftp自动传输 磁盘管理 故障排查 使用syslog记录日 ...

  3. Shell脚本攻略01-简介/终端打印

    概述  终端打印  玩转变量与环境变量  使用函数填加环境变量  通过shell进行数学运算  玩转文件描述符与重定向  数组和关联数组  使用别名  获取终端信息  获取.设置日期 ...

  4. 《Linux Shell脚本攻略》学习笔记-第一章

    1.1 简介 计算机可以从文本文件(称为shell脚本)中读取并执行命令. sehll脚本不仅节省了时间,而且清楚明白地表明了所执行的操作. bash shell变成了UNIX和Linux中既成事实的 ...

  5. 【Linux Shell脚本攻略】第1章 小试牛刀

    第1章 小试牛刀 1.1 简介 1.2 在终端中显示输出 1.2.1 预备知识 1.2.2 实战演练 1.2.3 工作原理 1.2.4 补充内容 1.在echo中转义换行符 2.打印彩色输出 1.3 ...

  6. linux 采集 bash 脚本,Linux shell脚本攻略(2)

    1.数组与关联数组 数组使用整数作为索引,关联数组使用字符串作为数组索引. 1.数组的定义: arr=(1 2 3) 或者:arr[0]=1;arr[1]=2;arr[2]=3 获取元素  echo ...

  7. Shell脚本攻略02-玩转变量与环境变量

    概述 变量是任何一种编程语言都必不可少的组成部分,用于存放各类数据. 脚本语言通常不需要在使用变量之前声明其类型.只需要直接赋值就可以了. 在Bash中,每一个变量的值都是字符串. 无论你给变量赋值时 ...

  8. Shell脚本攻略03-使用shell进行数学运算

    概述 无论哪种编程语言都少不了算术操作,在这则攻略中,我们将会研究在shell中进行算术运算的各种方法. 理论知识 在Bash shell环境中,可以利用let. (( ))和[]执行基本的算术操作. ...

  9. linux shell脚本攻略第3版_「技术干货」师傅说不会写shell脚本的网安不是一个好黑客,实战...

    shell脚本? 在说什么是shell脚本之前,先说说什么是shell. shell是外壳的意思,就是操作系统的外壳.我们可以通过shell命令来操作和控制操作系统,比如Linux中的Shell命令就 ...

最新文章

  1. 提问的智慧 如何得到好的帮助(转)
  2. deb包如何改支持12系统_对一个deb包的解压、修改、重新打包全过程方法
  3. BZOJ4868 Shoi2017期末考试(三分+贪心)
  4. fcpx插件Corporate Story for Mac(商务公司视频宣传片头模板)
  5. (67)SPI外设驱动接收驱动(六)(第14天)
  6. android滚动条布局平分,让你的布局滚动起来—ScrollView
  7. [高光谱] Hyperspectral-Classification Pytorch 数据集的读取、划分、加载
  8. 屌丝giser成长记-研一篇(上)
  9. java多线程设计模式:wait/notify机制(转)
  10. pandas 下一行减去上一行
  11. Android源码学习(一)系统源码初识
  12. JavaWeb SSM酒店信息管理系统
  13. Django——jinja2配置与使用
  14. 如何在浏览器中禁用和启用Cookie?
  15. 减员云售前可降本增效
  16. 某项目的双代号网络图如下所示_某工程项目的双代号网络计划如下图所示(时间单位:月)。...
  17. 四、nginx访问控制
  18. 秒杀99.99%大学生!看看清华的学霸到底有多牛?
  19. 什么是垂直搜索引擎(之二)
  20. [kernel 启动流程] 前篇——vmlinux.lds分析

热门文章

  1. android 百度大头针,百度地图所有的大头针一屏显示
  2. 70. Leetcode 701. 二叉搜索树中的插入操作 (二叉搜索树-基本操作类)
  3. Albert: A lite bert for self-supervised learning of language representations (Albert)
  4. CNN(Convolutional Neural Networks)算法
  5. 新手入门深度学习 | 卷积神经网络是什么?
  6. 机器学习第7天:深入了解逻辑回归
  7. 【Python刷题】_4
  8. 特征训练、预测一致性管理工具:开源项目Feast
  9. Spring Boot AutoConfiguration注解@ConditionalXXXX之前生今世
  10. 最小二乘法多项式拟合的Java实现--转