shell 学习笔记:数组

目录

[1. 定义数组](#1. 定义数组)

[2. 读取数组元素值](#2. 读取数组元素值)

[3. 关联数组](#3. 关联数组)

[4. 在数组前加一个感叹号 ! 可以获取数组的所有键](#4. 在数组前加一个感叹号 ! 可以获取数组的所有键)

[5. 在数组前加一个井号 # 获取数组的长度](# 获取数组的长度)

[6. 数组初始化的时候,也可以用变量](#6. 数组初始化的时候,也可以用变量)

[7. 循环输出数组的方法](#7. 循环输出数组的方法)

[7.1 for循环输出](#7.1 for循环输出)

[7.2 while循环输出](#7.2 while循环输出)

[7.2.1 let i++ 自增](#7.2.1 let i++ 自增)

[7.2.2 let i+=1 自增](#7.2.2 let i+=1 自增)

[7.2.3 let "i++" 或 let "i+=1" 自增也行](#7.2.3 let "i++" 或 let "i+=1" 自增也行)


1. 定义数组

  • 数组中可以存放多个值。Bash Shell 只支持一维数组
  • 初始化时不需要定义数组大小。
  • 数组元素的下标由 0 开始。
  • shell 数组用括号 () 来表示,元素用空格符号分割开

语法格式如下:

bash 复制代码
arr=(v1 v2 v3 ... vn)
bash 复制代码
arr=(a b 1 2 AB)
for v in ${arr[*]}
do
    echo $v
done

2. 读取数组元素值

读取数组元素值的一般格式为:{数组名\[下标\]},比如:arr=(1 2),第一个元素为 {arr0}

使用 {数组名\[\*\]} 或 {数组名@} 可以获取到一个数组的所有元素列表

bash 复制代码
arr=(a b 1 2 AB)
echo ${arr[0]}
echo ${arr[4]}
echo "------------"
echo ${arr[*]}
echo "------------"
for v in ${arr[*]}
do
    echo $v
done
echo "------------"
echo ${arr[@]}
for v in ${arr[@]}
do 
    echo $v
done

3. 关联数组

shell 支持关联数组,可以使用任意的字符串、或者整数作为下标来访问数组元素。

关联数组使用 declare 命令来声明,格式如下:

bash 复制代码
declare -A array_name

-A 选项是用于声明一个关联数组。

关联数组的键是唯一的。

示例:创建一个关联数组 website,并创建不同的键值:

bash 复制代码
declare -A website=(["baidu"]="www.baidu.com" ["huawei"]="www.huawei.com")
echo ${website["baidu"]}
echo ${website["huawei"]}

也可以先声明一个关联数组,然后再设置键和值:

bash 复制代码
declare -A website
website["baidu"]="www.baidu.com"
website["huawei"]="www.huawei.com"
echo ${website["baidu"]}
echo ${website["huawei"]}

4. 在数组前加一个感叹号 ! 可以获取数组的所有键

bash 复制代码
declare -A website
website["baidu"]="www.baidu.com"
website["huawei"]="www.huawei.com"
echo ${!website[*]}

5. 在数组前加一个井号 # 获取数组的长度

bash 复制代码
declare -A website
website["baidu"]="www.baidu.com"
website["huawei"]="www.huawei.com"
echo ${#website[*]}

6. 数组初始化的时候,也可以用变量

cpp 复制代码
ivar=1
arr=($ivar 3 5)
for v in ${arr[*]}
do
    echo $v
done

7. 循环输出数组的方法

7.1 for循环输出

bash 复制代码
arr=(1 2 3)
for v in ${arr[*]}
do
    echo $v
done

7.2 while循环输出

7.2.1 let i++ 自增
bash 复制代码
arr=(1 2 3)
i=0
while [ $i -lt ${#arr[@]} ]
do
    echo ${arr[$i]}
    let i++
done
7.2.2 let i+=1 自增
bash 复制代码
arr=(1 2 3)
i=0
while [ $i -lt ${#arr[@]} ]
do
    echo ${arr[$i]}
    let i+=1
done
7.2.3 let "i++" 或 let "i+=1" 自增也行
bash 复制代码
arr=(1 2 3)
i=0
while [ $i -lt ${#arr[@]} ]
do
    echo ${arr[$i]}
    let "i+=1"
done
echo "----------"
j=0
while [ $j -lt ${#arr[*]} ]
do
    echo ${arr[$j]}
    let "j++"
done

注:本文是学习笔记,文字描述主要摘抄自

Shell 数组 | 菜鸟教程

相关推荐
瑞克-桑切斯34 分钟前
企业生产环境:https部署+nginx高可用(业务不中断)
linux·服务器·数据库
非凡ghost4 小时前
视频剪辑不用等渲染,这款开源工具让切分合并秒级完成
运维·电脑·软件需求
FII工业富联科技服务6 小时前
Omniverse 数字孪生与柔性自动化,如何破解产能与交付、设备与空间的双重困境?
运维·自动化·devops
润滑卫士6 小时前
油液介电常数在线监测:测量原理与油液老化状态评估方法
运维
Rock Chin6977 小时前
把 n8n 接进 Slack:在对话里 @机器人 触发自动化工作流
运维·机器人·自动化
浩浩测试一下7 小时前
Linux 底层知识点 1
linux·运维·服务器
Eloudy7 小时前
全文 - IMEX 第01节 -IMEX overview
运维·服务器·网络
物联网软硬件开发-轨物科技8 小时前
【技术白皮书】光伏清检一体化机器人系统解决方案技术白皮书
大数据·运维·网络·人工智能·机器人
Escalating_xu8 小时前
【Linux 网络编程】TCP 跨平台实战:用 Windows 客户端访问 Linux 服务器
linux·服务器·网络
发量惊人的中年网工8 小时前
分公司访问总部ERP慢怎么办?SD-WAN组网的排查与验收要点
服务器·开发语言·php