bash中的数组

1 索引数组

#定义:
array=(1 "two" 3 "four")
array[index]=value

#访问数组元素(array必须用大括号括起来):
${
   array[${
   index}]}

# 获取数组所有元素(元素之间以空格分隔)
${
   array[@]}

# 获取数组长度
${
   #array[@]}

# 按下标遍历
for i in $(seq $((${
   #array[@]}-1)));
do
    echo $i, ${
   array[$i]};
done

# 按元素遍历(必须加双引号)
for var in "${array[@]}"

注:

  • @也可以换成*,建议使用@
  • array[“123”]定义的是索引数组,按理说索引数组应该是下标都是整数

  • 如果处理数组元素带空格的情况,bash会对”${array[@]}”情况下每个数组元素都加上双引号,确保元素中的空格不会被for识别为元素之间的分隔符

2 关联数组

# 定义
fruit_value=(["apple"]=3 ["an orange"]="three")
fruit_value[index]=value

# 访问数组元素
${fruit_value["apple"]}
${fruit_value["${fruit}"]}

# 获得所有key
${!fruit_value[@]}

# 获得所有value
${fruit_value[@]}

# 按key遍历关联数组
for var in "${!array[@]}"

注:

  • 推荐用@,”${!array[*]}”是对整个数组加双引号,而”{!array[@]}”是对每个key加双引号
  • 遍历数组时双引号必须加,如果key有空格可以正确分割
  • bash 4以上的版本才支持declare -A声明关联数组,bash 3有很多trick的做法,见参考

例:统计文件类型信息。

#!/bin/bash
if [ $# -ne 1 ];
then
    echo "Usage: filetype_analyzer.sh path"
    exit -1
fi
declare -A types
for file in `ls $1`
do
    type=`file $file -b | cut -d, -f1`
    let types["$type"]++
    #echo $file, $type, ${types[$type]}
done
for type in "${!types[@]}"
do
    echo $type ":" ${types["$type"]}
done

3 数组作为函数参数

3.1 一个数组

get_nth_array_element的位置参数含义:

  1. $1:返回数组第几个元素(从0开始)
  2. 2" {array[@]}”把数组元素转换成”array[0]” “array[1]” … “array[n-1]”,可以正确处理数组元素中有空格的情况。实际上函数接受了1+len(array)个位置参数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值