一、普通数组(索引数组)
基本语法
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
【转载请附】愿以此功德,回向 >>
原文链接:http://www.huangwenchao.com.cn/2015/11/bash-shell-4.html【每日一Shell(4) 数组和关联数组】