加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

arrays – 数组中的Bash检查元素,用于另一个数组中的元素

发布时间:2020-12-15 22:34:30 所属栏目:安全 来源:网络整理
导读:我找到了这个很酷的 Bash函数,用于检查数组是否包含一个元素: CONTAINS_ELEMENT(){ local e for e in "${@:2}"; do [[ "$e" == "$1" ]] return 0; done return 1} 以下是它的用法示例: if CONTAINS_ELEMENT $element "${array[@]}"; then... fi 我的问题是
我找到了这个很酷的 Bash函数,用于检查数组是否包含一个元素:

CONTAINS_ELEMENT(){
  local e
  for e in "${@:2}"; do [[ "$e" == "$1" ]] && return 0; done
  return 1
}

以下是它的用法示例:

if CONTAINS_ELEMENT $element "${array[@]}"; then
... 
fi

我的问题是:
有没有办法重写这个函数,以便它可以检查是否有任何值
array等于其他数组的任何值,而不只是检查一个数组
正确的价值呢?

解决方法

更正#3

试试下面的代码. ArrContains有两个参数,两个数组的名称.它从lArr1创建一个临时哈希,然后检查lArr2的任何元素是否在哈希中.这样可以避免嵌入式for循环.

#!/usr/bin/bash

ArrContains(){
  local lArr1 lArr2
  declare -A tmp
  eval lArr1=(""${$1[@]}"")
  eval lArr2=(""${$2[@]}"")
  for i in "${lArr1[@]}";{ ((++tmp['$i']));}
  for i in "${lArr2[@]}";{ [ -n "${tmp[$i]}" ] && return 0;}
  return 1
}

arr1=("a b" b c)
arr2=(x 'b c' e)
arr3=(q a b y)
ArrContains arr1 arr2 && echo Contains arr1 arr2
ArrContains arr1 arr3 && echo Contains arr1 arr3

输出:

Contains arr1 arr3

其他方法可能是定义一些分离字符并连接第一个哈希.然后搜索匹配SEPitemSEP字符串.

ArrContainsRe(){
  local lArr1 lArr2 tmp
  eval lArr1=(""${$1[@]}"")
  printf -v tmp ",%s" "${lArr1[@]}";
  tmp="$tmp,"
  eval lArr2=(""${$2[@]}"")
  for i in "${lArr2[@]}";{ [[ $tmp =~,$i,]] && return 0;}
  return 1
}
...
ArrContainsRe arr1 arr2 && echo ContainsRe arr1 arr2
ArrContainsRe arr1 arr3 && echo ContainsRe arr1 arr3

输出:

ContainsRe arr1 arr3

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读