每日一Shell(4) 数组和关联数组

一、普通数组(索引数组)

基本语法

1. 定义数组:
array_var=(1 2 3 4 5 6)

或者:

array_var=([0]=1 [1]=2 [2]=3 [3]=4 [4]=5 [5]=6)

相当于:

array_var[0]=1
array_var[1]=2
array_var[2]=3
array_var[3]=4
array_var[4]=5
array_var[5]=6
2. 打印数组的内容
echo ${array_var[0]}  # 1
index=5
echo ${array_var[$index]}  # 6
3. 以清单形式打出所有值
echo ${array_var[*]}  # 1 2 3 4 5 6

也可以:

echo ${array_var[@]}  # 1 2 3 4 5 6
4. 打印数组长度
echo ${#array_var[*]}  # 6
5. 删除数组

跟删除变量是一样的:

unset a

二、关联数组

关联数组(字典)从 Bash 4.0 版本开始被引入,通过散列数组实现。

1. 定义关联数组

先声明:

declare -A ass_array

添加元素(这样会清空原有的内容):

ass_array=([index1]=val1 [index2]=val2)

或者相当于:

ass_array[index1]=val1
ass_array[index2]=val2

显示内容:

echo "The value of index1 is ${ass_array[index1]}"
2. 列出数组索引

显示数组的所有 key:

echo ${!array_var[*]}

或者:

echo ${!array_var[@]}

列出数组的所有 value:

echo ${array_var[*]}

或者:

echo ${array_var[@]}

三、其他用法

参考:http://zengrong.net/post/1518.htm

1. 从文件中读取数组:
# 先将各行内容写入文件
cat <<EOF >arr.txt
apple
pear
grape
banana
EOF

# 将每一行读取为数组的一个元素
names=`cat arr.txt`
echo ${names[*]}
2. 数组的切片
adobe=('Flash' 'Flex' 'Photoshop' 'Dreamweaver' 'Premiere')
echo ${adobe[*]:1}  # 从第一个开始到结尾: Flex Photoshop Dreamweaver Premiere
echo ${adobe[*]::2} # 开头两个: Flash Flex
echo ${adobe[*]:1:3} # 从第 [1] 个到第 [3] 个: Flex Photoshop Dreamweaver
3. 连接数组
a=(1 2 3)
b=(a b c)
c=(${a[*]} ${b[*]})
echo ${c[*]}  # 1 2 3 a b c
4. 替换数组

下面这个例子可以对数组的每个元素执行替换:

arr=(apple orange app peach)
echo ${arr[*]/app/000}  # 输出 000le orange 000 peach
arr=(${arr[*]/app/000})  # 替换原来的数组
5. 删除元素
unset arr[1]
6. 数组的循环
for fruit in ${arr[*]}; do
    echo $fruit
done

或者:

 for ((i=0;i<${#arr[*]};++i)); do 
    echo ${arr[$i]}; 
done

【转载请附】愿以此功德,回向 >>

原文链接:https://www.huangwenchao.com.cn/2015/11/bash-shell-4.html【每日一Shell(4) 数组和关联数组】

发表评论

电子邮件地址不会被公开。 必填项已用*标注