1. 普通数组

  bash支持一维数组(不支持多维数组),并且没有限定数组的大小。类似与C语言,数组元素的下标由0开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于0。

  1.1 定义数组

  在Shell中,用括号来表示数组,数组元素用“空格”符号分割开。定义数组的一般形式为:
    array_name=(value1 ... valuen)

  

    array_name=(value0 value1 value2 value3)

    array_name=(
value0
value1
value2
value3
)

  还可以单独定义数组的各个分量:

    array_name[]=value0
array_name[]=value1
array_name[]=value2

  可以不使用连续的下标,而且下标的范围没有限制。

  1.2 读取数组

读取数组元素值的一般格式是:
    ${array_name[index]}
例如:

  1. valuen=${array_name[2]}

举个例子:

  

    #!/bin/sh
NAME[]="Zara"
NAME[]="Qadir"
NAME[]="Mahnaz"
NAME[]="Ayan"
NAME[]="Daisy"
echo "First Method: ${NAME[*]}"
echo "Second Method: ${NAME[@]}"
 

运行脚本,输出:

$./test.sh
First Index: Zara
Second Index: Qadir

使用@ 或 * 可以获取数组中的所有元素,例如:

  

    ${array_name[*]}
${array_name[@]}

  举个例子:

  

    #!/bin/sh
NAME[]="Zara"
NAME[]="Qadir"
NAME[]="Mahnaz"
NAME[]="Ayan"
NAME[]="Daisy"
echo "First Method: ${NAME[*]}"
echo "Second Method: ${NAME[@]}"

  运行脚本,输出:

$./test.sh
First Method: Zara Qadir Mahnaz Ayan Daisy
Second Method: Zara Qadir Mahnaz Ayan Daisy

  1.3获取数组的长度

获取数组长度的方法与获取字符串长度的方法相同,例如:
    # 取得数组元素的个数
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
# 取得数组单个元素的长度
lengthn=${#array_name[n]}

2. 关联数组

  shell 提供了另外一种数组,其可以使用任意的字符串作为下标(不必是整数)来访问数组元素。这种数组叫做关联数组(associative array)。
关联数组的下标和值称为键值对,它们是一一对应的关系。在关联数组中,键是唯一的,值可以不唯一。
shell 的关联数组和 perl 的关联数组在实现功能上是一样的。在 perl 中,关联数组有时候称为哈希(hash)。

  2.1 定义关联数组
shell 的关联数组和 shell 的下标数组在定义和使用上完全一样,只是在索引上有区别。
需要注意的是,在使用关联数组之前,需要使用命令 declare -A array 进行显示声明。

  

#!/bin/bash
name=(jim tom lucy) declare -A phone
phone=([jim]= [tom]= [lucy]=) for i in `eval echo {..$((${#name[*]}-))}`
do
echo ${name[i]} phone number is ${phone["${name[i]}"]}
done

  在命令提示符下输入 ./test.sh,执行结果如下:
  jim phone number is 135
  tom phone number is 136
  lucy phone number is 158

  2.2 关联数组的读取和求长度和普通的数组方法一样

复制运行脚本,输出:

bash脚本中的普通数组和关联数组的更多相关文章

  1. grep 查找bash脚本中的注释代码

    出于安全性的考虑,不建议在bash脚本中注释掉不使用的代码.也就是说如果某段代码不使用了,那么应该删除掉,而不是简单地注释掉.假如你突然意识到这一点,而以前并没有遵从这个原则,现在需要找出脚本中的注释 ...

  2. 如何在Bash脚本中引入alias

    更多精彩内容,请关注微信公众号:后端技术小屋 alias的使用 在日常开发中,为了提高运维效率,我们会用alias(命令别名)来定义命令的简称.比如在~/.bash_profile中添加: alias ...

  3. [ SHELL编程 ] 数组、关联数组和awk数组

    本文主要对shell编程中常用的数组.关联数组和awk数组定义.操作以及注意事项做个总结,并提供具体案例. 数组 数组定义:一对圆括号表示数组,数组元素之间用空格符号分割. Array=(val1 v ...

  4. JS 索引数组、关联数组和静态数组、动态数组

    JS 索引数组.关联数组和静态数组.动态数组 数组分类: 1.从数组的下标分为索引数组.关联数组 var ary1 = [1,3,5,8]; //按索引去取数组元素,从0开始(当然某些语言实现从1开始 ...

  5. shell之数组和关联数组

    数组和关联数组 #!/bin/bash #定义数组1 array_var1=(1 2 3 4 5 6)# #定义数组2 array_var[0]="test1" array_var ...

  6. 【Linux】数组与关联数组

    数组 数组的定义: variable=(arg1 arg2 arg3 -) 中间用空格分开,数组的下标从0开始 1.获取下标为n的元素 variable[n] 不存在数组溢出的情况,如果下标n> ...

  7. JavaScript 数组2—关联数组

    ㈠什么是关联数组 可以自定义下标名称的数组 ㈡为什么 索引数组中的数字下标没有明确的意义 ㈢何时 只希望每个元素都有专门的名称时 ㈣如何:2步 1)创建空数组 2)向空数组中添加新元素,并自定义下标名 ...

  8. Bash脚本中的操作符

    一.文件測试操作符 假设以下的条件成立将会返回真. -e 文件存在 -a 文件存在 这个选项的效果与-e同样. 可是它已经被"弃用"了, 而且不鼓舞使用. -f 表示这个文件是一个 ...

  9. bash 脚本中分号的作用

    在Linux bash shell中,语句中的分号一般用作代码块标识 1.单行语句一般要用到分号来区分代码块.比如: weblogic@pmtest:/$if [ "$PS1" ] ...

随机推荐

  1. IOS 去掉导航栏(UINavigationBar)下方的横线

    这是导航栏的问题,将下边的代码放在  viewWillAppear  方法中就可以实现效果: - (void)viewWillAppear:(BOOL)animated{ // Called when ...

  2. 移动端hrml模板

    <!DOCTYPE html><html><head> <title>时钟</title> <meta charset="u ...

  3. weblogic无需用户名密码启动Server

    创建了Server-0. 但每次启动需要手工输入管理账户和密码. 并不方便. 现在要让它自动输入并启动.一. 新建security文件夹 # cd $WEBLOGIC_HOME/servers/Ser ...

  4. 查询局域网内在线电脑IP

    COLOR 0A CLS @ECHO Off Title 查询局域网内在线电脑IP :send @ECHO off&setlocal enabledelayedexpansion ECHO 正 ...

  5. SQL Server多表多列更新

    student表: lag表: 要求将student表stu_id列为1的stu_nick列和stu_phont列的数据更新为lag表的lag_nick列和lag_phone列. SQL语句: upd ...

  6. checkbox复选框全选

    HTML: <input type="checkbox" class="all"> <input type="checkbox&qu ...

  7. map find 是线程安全的吗

    测试环境gcc4.8.2     iterator find ( const key_type& k ); const_iterator find ( const key_type& ...

  8. 在iMac机os x上装win7双系统经验心得

    首先,以上iMac的内存超过4GB,需要安装x64版的win7,可以用QQ旋风从这里下载(cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso) 下载 ...

  9. sqlplus使用(一)

    一,sqlplus 环境变量 sqlplus的环境变量(来自SQL*Plus® User's Guide and Reference Release 11.2) Parameter or Variab ...

  10. MD5与Base64的思考

    MD5加密是对任意长的数据使用MD5哈稀算法散列为4个32位组,若格式化为ASCII字符则为16字符,若格式化16进制表示,则为32字符.  (MD5的具体算法请参阅相关书籍和资料) MD5广泛用于数 ...