shell中的数组操作


shell中数组操作

1.将一个字符串按照指定分隔符转换成数组

在shell处理中,经常需要将一个字符串按照字符串中的某个分隔符转换成一个数组,从而方便处理,转换时需要环境变量IFS,指定分隔符类型:

#!/bin/bash
# test.sh
# 给定字符串,以 ; 进行分割
TEST_STR="abc;def;ghi;jkl"
# 备份之前的分隔符环境变量
OLD_IFS=$IFS
# 指定分隔符为 ;
IFS=";"
# 将字符串以 ; 分割成数组
STR_LIST=($TEST_STR)
# 恢复分隔符环境变量
IFS=$OLD_IFS

# 数组大小
echo "arry size: ${#STR_LIST[@]}"
# 数组内容
echo "arry content: ${STR_LIST[@]}"

$./test.sh
arry size: 4
arry content: abc def ghi jkl

2.判断数组中是否包含某字符串

#!/bin/bash
# test.sh
# 给定字符串,以 ; 进行分割
item_arry=($1)

# 扩展给定数组的所有索引值
for i in ${!item_arry[@]};
do
    if [ "${item_arry[$i]}" == "abc" ]; then
        echo "abc is in arry"
    fi
done

$./test.sh "abc def ghi jkl"
abc is in arry

3.判断数组内是否有重复元素

由于没有找到对应的操作,借助awk实现判断数组内是否有重复元素:

#!/bin/bash
# test.sh

# 将输入参数转为数组
item_arry=($1)

# 遍历数组元素
for i in ${item_arry[@]}; do
    echo $i
done | awk '{a[$1]++}END{for(i in a) {print a[i] ,i}}' | awk '$1>1{print $2" imte is duplicate";exit 1}'

# 判断awk的返回值,为1则有重复元素
if [ $? -ne 0 ]; then
    echo "item is duplicate"
else
    echo "item is unique"
fi

$./test.sh "abc def ghi jkl"
item is unique

$./test.sh "abcd def ghi jkl abcd"
abcd imte is duplicate
item is duplicate


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM