定义数组
格式: 数组名称=(值1 值2 值3)
每个数组元素值之间使用空格分隔,元素值包含空格使用引号括起来。
# 定义一个数组 language = lg lg=(java .net php)
数组元素可以指定不同的元素下标
# 定义第二个数组 数据库,指定数组下标 dbs=([0]=mysql [5]=oracle [10]=sqlServer)
数组dbs的长度依然是3,但是下标可以随意指定,必须是数字(也可是字符串,但会出现问题)。
创建关联数组
需要使用 declare 命令声明。
declare -A book=(["java"]="java权威指南" ["net"]=".net权威指南" ["php"]="PHP权威指南") echo javaBook: ${book["java"]} echo .netBook: ${book["net"]} echo phpBook: ${book["php"]}
创建关联数组时,必须使用 declare -A 声明 (-a 代表普通数组)。
如果给普通数组增加类似key-value形式的元素,则遍历时第一个数组元素将无法获取。获取到的元素是最后一次添加key-value键值对的元素。如果添加多个关联元素(键值对)通过任何key获取到的元素值也都是最后一次增加的关联元素。
获取数组长度
格式:${#数组名称[*|@]}
echo 数组lg长度:${#lg[*]}
echo 数组dbs长度:${#dbs[@]}
获取数组元素长度
格式:${#数组名称[数组下标]}
echo "数组lg第一个元素"${lg[0]} 元素长度:${#lg[0]} echo "数组lg第二个元素"${lg[1]} 元素长度:${#lg[1]}
删除数组元素
# 删除lg第二个元素 unset lg[1]
删除数组
# 删除dbs数组 unset dbs
合并数组
@符号可以换为星号“*”
all=(${lg[@]} ${dbs[@]} ${book[@]})
遍历数组
for itItem in ${all[@]} do echo $itItem done
测试代码:
#!/bin/bash # 定义一个数组 language = lg lg=(java .net php) echo 数组lg长度:${#lg[*]} echo "数组lg第一个元素"${lg[0]} 元素长度:${#lg[0]} echo "数组lg第二个元素"${lg[1]} 元素长度:${#lg[1]} echo "数组lg第三个元素"${lg[2]} 元素长度:${#lg[2]} # 定义第二个数组 数据库,指定数组下标 dbs=([0]=mysql [5]=oracle [10]=sqlServer) echo 数组dbs长度:${#dbs[@]} echo 数组dbs第一个元素:${dbs[0]} 长度:${#dbs[0]} echo 尝试使用不存在的数组下标2获取数组dbs元素:${dbs[2]} 长度:${#dbs[2]} echo 数组dbs第二个元素:${dbs[5]} 长度:${#dbs[5]} echo 数组dbs第三个元素:${dbs[10]} 长度:${#dbs[10]} # 定义关联数组 declare -A book=(["java"]="java权威指南" ["net"]=".net权威指南" ["php"]="PHP权威指南") echo javaBook: ${book["java"]} echo .netBook: ${book["net"]} echo phpBook: ${book["php"]} # 删除lg第二个元素 # unset lg[1] # 删除dbs数组 # unset dbs # 合并数组 all=(${lg[@]} ${dbs[@]} ${book[@]}) for itItem in ${all[@]} do echo $itItem done