Linux Shell

定义数组

格式: 数组名称=(值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



转载请指明出处!http://www.miselehe.com/article/view/126