Shell脚本攻略05-数组和关联数组
概述
之前梳理的博文 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-数组和关联数组相关推荐
- LINUX SHELL脚本攻略笔记[速查]
LINUX SHELL脚本攻略笔记[速查] Linux Shell脚本攻略笔记[速查] 资源 shell script run shell script echo printf 环境变量和变量 pgr ...
- Linux Shell脚本攻略 读书笔记
内容目录: 嗨,Echo一下 给终端来点颜色 shell的控制结构 算术比较 目录操作 网站下载 tar 归档工具 rsync 备份系统快照 ftp自动传输 磁盘管理 故障排查 使用syslog记录日 ...
- Shell脚本攻略01-简介/终端打印
概述 终端打印 玩转变量与环境变量 使用函数填加环境变量 通过shell进行数学运算 玩转文件描述符与重定向 数组和关联数组 使用别名 获取终端信息 获取.设置日期 ...
- 《Linux Shell脚本攻略》学习笔记-第一章
1.1 简介 计算机可以从文本文件(称为shell脚本)中读取并执行命令. sehll脚本不仅节省了时间,而且清楚明白地表明了所执行的操作. bash shell变成了UNIX和Linux中既成事实的 ...
- 【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 ...
- linux 采集 bash 脚本,Linux shell脚本攻略(2)
1.数组与关联数组 数组使用整数作为索引,关联数组使用字符串作为数组索引. 1.数组的定义: arr=(1 2 3) 或者:arr[0]=1;arr[1]=2;arr[2]=3 获取元素 echo ...
- Shell脚本攻略02-玩转变量与环境变量
概述 变量是任何一种编程语言都必不可少的组成部分,用于存放各类数据. 脚本语言通常不需要在使用变量之前声明其类型.只需要直接赋值就可以了. 在Bash中,每一个变量的值都是字符串. 无论你给变量赋值时 ...
- Shell脚本攻略03-使用shell进行数学运算
概述 无论哪种编程语言都少不了算术操作,在这则攻略中,我们将会研究在shell中进行算术运算的各种方法. 理论知识 在Bash shell环境中,可以利用let. (( ))和[]执行基本的算术操作. ...
- linux shell脚本攻略第3版_「技术干货」师傅说不会写shell脚本的网安不是一个好黑客,实战...
shell脚本? 在说什么是shell脚本之前,先说说什么是shell. shell是外壳的意思,就是操作系统的外壳.我们可以通过shell命令来操作和控制操作系统,比如Linux中的Shell命令就 ...
最新文章
- 提问的智慧 如何得到好的帮助(转)
- deb包如何改支持12系统_对一个deb包的解压、修改、重新打包全过程方法
- BZOJ4868 Shoi2017期末考试(三分+贪心)
- fcpx插件Corporate Story for Mac(商务公司视频宣传片头模板)
- (67)SPI外设驱动接收驱动(六)(第14天)
- android滚动条布局平分,让你的布局滚动起来—ScrollView
- [高光谱] Hyperspectral-Classification Pytorch 数据集的读取、划分、加载
- 屌丝giser成长记-研一篇(上)
- java多线程设计模式:wait/notify机制(转)
- pandas 下一行减去上一行
- Android源码学习(一)系统源码初识
- JavaWeb SSM酒店信息管理系统
- Django——jinja2配置与使用
- 如何在浏览器中禁用和启用Cookie?
- 减员云售前可降本增效
- 某项目的双代号网络图如下所示_某工程项目的双代号网络计划如下图所示(时间单位:月)。...
- 四、nginx访问控制
- 秒杀99.99%大学生!看看清华的学霸到底有多牛?
- 什么是垂直搜索引擎(之二)
- [kernel 启动流程] 前篇——vmlinux.lds分析
热门文章
- android 百度大头针,百度地图所有的大头针一屏显示
- 70. Leetcode 701. 二叉搜索树中的插入操作 (二叉搜索树-基本操作类)
- Albert: A lite bert for self-supervised learning of language representations (Albert)
- CNN(Convolutional Neural Networks)算法
- 新手入门深度学习 | 卷积神经网络是什么?
- 机器学习第7天:深入了解逻辑回归
- 【Python刷题】_4
- 特征训练、预测一致性管理工具:开源项目Feast
- Spring Boot AutoConfiguration注解@ConditionalXXXX之前生今世
- 最小二乘法多项式拟合的Java实现--转