shell 判断字符串是否存在数组中

遍历数组

当然,可以直接遍历数组进行匹配,例如:

      初始化数组的另一种方法是,用其他命令输出的结果来填充到数组中,例如把 ls 命令输出的文件列表填充到数组中:

ARR=(`ls /opt/`)

for FILE in ${ARR[@]};
do
    echo $FILE;
done

「2」遍历数组方法为:

for NUM in ${ARR[*]}

do
  echo $NUM
done

O(n2)的普通搜索

#普通的搜索方式,时间复杂度O(N2)  

for e in ${element[*]}  

do  

   for s in ${search[*]}  

   do  

       if [ $e = $s ]; then  

           echo "找到$e"  

           break  

       fi  

   done  

done  

O(1)的关联数组搜索

#关联数组方式  

declare -A newsearch  

for s in ${search[*]}  

do  

   newsearch[$s]=1  

done  

#KEY值唯一性,时间复杂度O(1)  

for e in ${element[*]}  

do  

   if [ ${newsearch[$e]} -eq 1 ]; then  

       echo "找到$e"  

   fi  

done 

 

语法匹配

(存在瑕疵,更具自己项目使用情况来避免bug)

操作关联数组的语法
关联数组的操作语法和数组的操作语法完全一致,如下列出常见的操作。
 

语法描述
${!array[*]}取关联数组所有键
${!array[@]}取关联数组所有键
${array[*]}取关联数组所有值
${array[@]}取关联数组所有值
${#array[*]}关联数组的长度
${#array[@]}关联数组的长度

语法格式: [[ "${array[@]}" =~ "字符串" ]]

#!/bin/sh
##数组
array=(
address
base
cart
company
store
)

# $1 如果存在,输出 $1 exists,$1 如果不存在,输出 $1 not exists
if [ "$1" != "" ];then
    if [[ "${array[@]}"  =~ "${1}" ]]; then
        echo "$1 exists"
    elif [[ ! "${array[@]}"  =~ "${1}" ]]; then
        echo "$1 not exists"
    fi
else
    echo "请传入一个参数"
fi

问题:包含关系也能通过(add匹配address通过)

1扩展:

这种方式不仅可以判断字符串是否存在数组中,也快判断字符串是否存在一个文本中。

## 判断字符串是否存在文本中
#!/bin/sh

names="I like you. Do you like me"
if [[ "${names[@]}"  =~ "me" ]]; then
    echo '字符串存在'
fi

2扩展:

判断一个指定的字符串是否在该数组中:

grep: 

  • -w 或 --word-regexp : 只显示全字符合的列。​​​​
  • -q 或 --quiet或--silent : 不显示任何信息。
if echo "${ARR[@]}" | grep -wq "item_1" &>/dev/null; then
  echo "Found"
fi

参考:

linux shell 判断字符串是否在数组中 - 代码先锋网

shell关联数组提高查找效率 【图文】_采菊篱下_51CTO博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值