shell支持一维数组(不支持多维数组),并且没有限定数组的大小。

1. 定义数组

shell中,用括号来表示数组,数组元素用空格分隔,下标从0开始

方式1:

数组名=(值1 值2...值n),如array_name=(value0 value1 value2)

方式2:

array_name=(value0
value1
value2
)

方式3 :单独定义数组的值

array_name[0]=value0
array_name[1]=value1
array_name[2]=value2

## 2.读取数组
* 获取数组某个元素的值${数组名[下标]} 如${arrayName[0]}
* 使用@可以获取数组中的所有元素${数组名[@]},如${arrayName[@]}
```#shell
array=(1 3 4 6)
#打印第一个元素
echo ${array[0]} #1
#打印全部元素
echo ${array[@]} #1 3 4 6
echo ${array[*]} #1 3 4 6
```

3. 获取数组的长度

  • 获取数组长度的方法和获取字符串长度的方法相同:length=\({#数组名[@]}或length=\){#数组名[*]}
  • 获取数组某元素的长度:length=${#数组名[下标]}
#!/bin/sh
list1=("east" "west" "north" "south")
list2=('one'
'two'
'three'
'four'
)
list3[0]="陆风"
list3[1]="江铃"
list3[3]="长安"
#打印list1的所有元素
echo "list1元素: "${list1[@]} #list1元素: east west north south
#打印list2的长度
echo "list2长度:"${#list1[@]} #list2长度:4
#打印list3的第一个元素及其长度
echo "list3第1个元素: "${list3[0]} ${#list3[0]} #list3第1个元素: 陆风 2
#打印数组不存在的元素
echo "list3第3个元素: "${list3[2]} ${#list3[2]} #list3第3个元素: 0

4. shell数组中*和@的区别

\*加上双引号,会被当成一串字符串处理
@加上双引号,依然被当作数组处理

```#shell
#!/bin/sh
list_a=(1 2 'a' b)
echo "--{array[@]}--"
for i in ${list_a[@]};do
echo $i
done
echo "--{array[*]}--"
for i in ${list_a[*]};do
echo $i
done
echo "--\"{array[@]}\"--"
for i in "${list_a[@]}";do
echo $i
done
echo "--\"{array[*]}\"--"
for i in "${list_a[*]}";do
echo $i
done
```
结果:
```#xml
--{array[@]}--
1
2
a
b
--{array[*]}--
1
2
a
b
--"{array[@]}"--
1
2
a
b
--"{array[*]}"--
1 2 a b
```
## 5.变量在数组中的使用

数组里添加变量,必须要加$,否则添加的是一个字符串
使用变量作为下标去获取value,变量加不加$都可以

```#shell
#!/bin/sh
strA="Tom Cat"
a=5
#传入不存在的变量,数组不会增加
#传入带空格的变量,会将变量按空格分拆添加到数组中
list_a=(1 2 'a' b $c $strA StrDarle)
echo ${#list_a[@]}
#获取第6个和第7个元素
echo "第6个元素:"${list_a[$a]} "第7个元素" ${list_a[a+1]}
for i in `seq 1 ${#list_a[@]}`;do
echo "第${i}个元素:"${list_a[i-1]}
done
```
结果
```#log
7
第6个元素:Cat 第7个元素 StrDarle
第1个元素:1
第2个元素:2
第3个元素:a
第4个元素:b
第5个元素:Tom
第6个元素:Cat
第7个元素:StrDarle
```

shell 3数组的更多相关文章

  1. 每天一个shell知识--数组

    1.shell中数组的定义: 数组名=(value value1 value2 ) 也可以单独的设定数组的分量: arrayL[0]=value arrayL[1]=value1 2.${arrayL ...

  2. Linux shell之数组

    引言 在Linux平台上工作,我们经常需要使用shell来编写一些有用.有意义的脚本程序.有时,会经常使用shell数组.那么,shell中的数组是怎么表现的呢,又是怎么定义的呢?接下来逐一的进行讲解 ...

  3. linux shell 中数组使用方法介绍

    linux shell在编程方面比windows 批处理强大太多,不管是在循环.运算.已经数据类型方面都是不能比較的. 以下是个人在使用时候,对它在数组方面一些操作进行的总结. 1.数组定义 [che ...

  4. shell脚本-数组

    shell脚本-数组 数组 变量:存储单个元素的内存空间. 数组:存储多个元素的连续的内存空间,相当于多个变量的集合. 数组索引:编号从0开始,属于数值索引.索引可支持使用自定义的格式,而不仅是数值格 ...

  5. Shell 编程 数组

    本篇主要写一些shell脚本数组的使用. 数组定义 数组名=(value0 value1 vlaue2 ...) 数组名=([0]=value [1]=value [2]=vlaue ...) 列表名 ...

  6. 我们一起来学Shell - shell的数组

    文章目录 什么是数组 数组中常用变量 数组的定义 小括号定义数组变量 小括号加键值对定义数组变量 分别定义数组变量 动态地定义数组变量 数组赋值的切片 遍历数组 关联数组 我们一起来学Shell - ...

  7. Shell 之数组 [转]

    本文也即<Learning the bash Shell>3rd Edition的第六章Command-Line Options and Typed varilables之读书笔记之三,但 ...

  8. shell之数组

    1.从数组的下标分为索引数组.关联数组 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 /* 索引数组,即通常情况下所说的数组 */ var ary1 = [1,3,5, ...

  9. shell中数组讲解

    定义数组 在Shell中,用括号来表示数组,数组元素用"空格"符号分割开.定义数组的一般形式为: 代码如下: 数组名=(值1 值2 ... 值n) 例如: 代码如下: array_ ...

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

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

随机推荐

  1. php session和cookie知识

  2. Python decode和encody

    s = "我今天非常的困" bs = s.encode("utf-8")# 把字符串转化成utf-8格式bytes # bytes 不是给人看的, 给机器用的 ...

  3. WEB接口测试之Jmeter接口测试自动化 (二)

    通过逐个录入的方式,好不容易将需要测试几十个接口的300多个测试用例录入sampler-http请求中,固定的测试环境跑起来也还 感觉良好.不料在新服务器环境中跑用例时,问题来了:修改参数维护脚本等成 ...

  4. Docker入门讲解

    1:容器重命名 [root@Docker ~]#docker run --name test_container -i -t centos /bin/bash[root@3ba67c6cf3f8 /] ...

  5. 关于XCode 的agvtool命令行

    简介:用agvtool如何来自动更新版本号和bulid version   agvtool是一个命令行工具,允许你自动递增到下一个最高的数量或具体的数字这些数字.本文档提供了更新您的构建和版本号码使用 ...

  6. Unity3D-常用小功能详解,例子(得分变动效果、倒计时)

    Unity3D-Demo多个功能方法 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 1 Score Ind ...

  7. bind() 函数兼容

    为了搞清这个陌生又熟悉的bind,google一下,发现javascript1.8.5版本中原生实现了此方法,目前IE9+,ff4+,chrome7+支持此方法,opera和safari不支持(MDN ...

  8. java反射机制的作用与优点

    java的反射机制就是增加程序的灵活性,避免将程序写死到代码里,例如: 实例化一个 person()对象, 不使用反射, new person(); 如果想变成 实例化 其他类, 那么必须修改源代码, ...

  9. 《DSP using MATLAB》Problem 4.10

    今天擦完了玻璃,尽管有地方不那么明亮干净,冷风中瑟瑟发抖,年也快临近了. 代码是从网上找的, function [p, np, r, nr] = deconv_m(b, nb, a, na) % Mo ...

  10. 网络流--最大流ek模板

    标准大白书式模板,代码简单但由于效率并不高,所以并不常用,就是这样 #include<stdio.h> #include<string.h> #include<queue ...