shell 遍历数组,将数组元素赋值变量

数组定义

array=('aaa' 18 20 'bbb' 'aba aba')

数组描述

获取数组长度

数组长度的获取方法有下面三种,常用的是前面两种。

length=${#array[@]}

length=${#array[*]}

length=${#array}

访问数组元素

数组下标是从0开始 的,如果下标是:*或者@ 则得到整个数组内容。

echo ${arr[2]}

var=${array[3]}    #将数组元素赋值给变量var
echo $var

为数组元素赋值

在为数组元素赋值时候,通过索引(下标从0开始)为数组元素赋值,若存在,会替换原来的值。

array=('aaa' 18 20 'bbb' 'aba aba')
array[2]=qaz

追加元素

在数组末尾追加元素通过索引(下标从0开始)为元素赋值。若不存在,则会添加一个新的元素。

array=('aaa' 18 20 'bbb' 'aba aba')
array[5]=qaz

遍历数组

for elem in ${array[@]}; do
    echo $elem
    #do something....
done
for i in $(seq 0 ${#array[@]}); do
    elem=${array[$i]}
    echo $elem
    #do something....
done

举例

利用数组进行代码中文本的替换。

#codes dir
FILE_DIR="/repos/codes"

OLD_LINES_ARRY=('RECEIVER_STATE'
                'INTRA'
                'NOT_ALLOWED'
                'EP_TO'
                'NOT_PROCESSING_RESOURCES'
                'UNKNOWN_LOCAL')

NEW_LINES_ARRY=('CAUSE_WITH_RECEIVER_STATE'
                'HAND_TYPE_INTRA'
                'HAND_TYPE_NOT_ALLOWED;'
                'HAND_TYPE_EP_TO'
                'CAUSE_NOT_PROCESSING_RESOURCES'
                'CAUSE_NETWORK_UNKNOWN_LOCAL')

for i in $(seq 0 ${#OLD_LINES_ARRY[@]}); do
    old_line="${OLD_LINES_ARRY[$i]}"
    new_line=${NEW_LINES_ARRY[$i]}
    find $FILE_DIR -type f -a -iname "*.cc" | xargs sed -i "s/$old_line/$new_line/g"
done

参考

https://www.jb51.net/article/142266.htm

https://www.jb51.net/article/69165.htm


版权声明:本文为lm_hao原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。