Shell 数组与关联数组详解及实例代码

 更新时间:2017年01月22日 11:09:13   投稿:lqh  
这篇文章主要介绍了 Shell 数组与关联数组详解及实例代码的相关资料,需要的朋友可以参考下

Shell 数组与关联数组

1.数组

1.1. 数组定义

一对圆括号表示数组,数组元素之间用空格符号分割

xiaosi@Qunar:~$ a=(1 2 3)
xiaosi@Qunar:~$ echo $a
1
xiaosi@Qunar:~$ a=("yoona" "lucy" "tom")
xiaosi@Qunar:~$ echo $a
yoona

1.2. 数组长度,元素,赋值与删除

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

xiaosi@Qunar:~$ echo ${#a[@]}
3
xiaosi@Qunar:~$ echo ${#a[*]}
3

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

xiaosi@Qunar:~$ array=("yoona" "lucy" "tom")
xiaosi@Qunar:~$ echo ${array[0]}
yoona
xiaosi@Qunar:~$ echo ${array[1]}
lucy
xiaosi@Qunar:~$ echo ${array[*]}
yoona lucy tom
xiaosi@Qunar:~$ echo ${array[@]}
yoona lucy tom

赋值:通过数组名[下标]可以对其进行引用赋值,如果下标不存在,自动添加新一个数组元素

xiaosi@Qunar:~$ array=("yoona" "lucy" "tom")
xiaosi@Qunar:~$ echo ${array[2]}
tom
xiaosi@Qunar:~$ array[2]=lily
xiaosi@Qunar:~$ echo ${array[2]}
lily

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

xiaosi@Qunar:~$ array=("yoona" "lucy" "tom")
xiaosi@Qunar:~$ unset array[1]
xiaosi@Qunar:~$ echo ${array[*]}
yoona tom
xiaosi@Qunar:~$ unset array
xiaosi@Qunar:~$ echo ${array[*]}
xiaosi@Qunar:~$ 

1.3. 获取某范围的元素

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

xiaosi@Qunar:~$ array=(yoona lucy tom)
xiaosi@Qunar:~$ echo ${array[*]}
yoona lucy tom
xiaosi@Qunar:~$ echo ${array[*]:1:2}
lucy tom
xiaosi@Qunar:~$ echo ${array[@]:0:1}
yoona

1.4. 替换

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

xiaosi@Qunar:~$ array=(yoona lucy tom)
xiaosi@Qunar:~$ echo ${array[@]/lucy/lily}
yoona lily tom
xiaosi@Qunar:~$ echo ${array[@]}
yoona lucy tom

2. 关联数组

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

2.1 定义关联数组

首先需要使用声明语句将一个变量声明为关联数组。

xiaosi@Qunar:~$ declare -A assArray

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

(1)利用内嵌索引-值列表的方法

xiaosi@Qunar:~$ assArray=([lucy]=beijing [yoona]=shanghai)
xiaosi@Qunar:~$ echo ${assArray[lucy]}
beijing

(2)使用独立的索引-值进行赋值

xiaosi@Qunar:~$ assArray[lily]=shandong
xiaosi@Qunar:~$ assArray[sunny]=xian
xiaosi@Qunar:~$ echo ${assArray[sunny]}
xian
xiaosi@Qunar:~$ echo ${assArray[lily]}
shandong

2.2 列出数组索引

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

xiaosi@Qunar:~$ echo ${!assArray[*]}
lily yoona sunny lucy
xiaosi@Qunar:~$ echo ${!assArray[@]}
lily yoona sunny lucy

2.3 获取所有键值对

#! /bin/bash
declare -A cityArray
cityArray=([yoona]=beijing [lucy]=shanghai [lily]=shandong)
for key in ${!cityArray[*]}
do
 echo "${key} come from ${cityArray[$key]}"
done

结果:

xiaosi@Qunar:~/company/sh$ bash array.sh 
lily come from shandong
yoona come from beijing
lucy come from shanghai


感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章

  • Linux服务器配置多个svn仓库流程详解

    Linux服务器配置多个svn仓库流程详解

    这篇文章主要介绍了linux服务器配置多个svn仓库流程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • Linux下sersync数据实时同步

    Linux下sersync数据实时同步

    这篇文章主要为大家详细介绍了Linux下sersync数据实时同步的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • Linux gdb调试正在运行中的程序方式

    Linux gdb调试正在运行中的程序方式

    这篇文章主要介绍了Linux gdb调试正在运行中的程序方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • linux启动和重启nginx方法

    linux启动和重启nginx方法

    在本篇文章里小编给大家整理了关于linux如何启动nginx并重启哦的小技巧,有需要的朋友们参考下。
    2019-06-06
  • Apache添加多端口及实现单ip多端口映射的方法

    Apache添加多端口及实现单ip多端口映射的方法

    这篇文章主要介绍了Apache添加多端口及实现单ip多端口映射的方法的相关资料,需要的朋友可以参考下
    2016-02-02
  • VMware10下CentOS 7安装配置图文教程

    VMware10下CentOS 7安装配置图文教程

    这篇文章主要为大家详细介绍了VMware10下CentOS 7安装配置图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-09-09
  • centos环境下lnmp安装配置

    centos环境下lnmp安装配置

    这篇文章主要介绍了centos环境下lnmp安装配置,大家参考使用吧
    2014-01-01
  • Linux Centos7下生成https自签名证书

    Linux Centos7下生成https自签名证书

    这篇文章主要为大家详细介绍了Linux Centos7下生成https自签名证书的相关知识,文中通过示例图片进行了简单讲解,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-11-11
  • linux下安装mongodb教程

    linux下安装mongodb教程

    MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。这篇文章主要介绍了linux下安装mongodb,需要的朋友可以参考下
    2019-12-12
  • linux下用cron定时执行任务的方法

    linux下用cron定时执行任务的方法

    呵呵,比较有用,网上摘抄的。留着备用吧。
    2008-06-06

最新评论