You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash脚本中如何判断两个字符串是否同时完整存在于同一数组

原代码错误原因

你写的代码存在三个核心问题,导致运行结果不符合预期:

  • 直接展开数组变量$test_array只会输出数组的第一个元素,无法覆盖数组所有内容,相当于只校验了第一个元素有没有匹配值
  • 就算用${test_array[*]}拼接所有元素做字符串匹配,也无法保证是完整元素匹配,比如数组中存在planning123时,匹配planning1也会误命中,不满足你的需求
  • 匹配目标和需求不符:你需要校验的是planning1、planning2两个值是否存在,原代码校验的是active和planning
正确实现方案

方案1:关联数组法(推荐,查询效率高,无匹配误差)

利用bash的关联数组做哈希查询,是校验数组完整成员的最稳妥方案,适合数组元素较多的场景:

#!/bin/bash
# 定义给定的待查数组
target_array=("active" "planning" "delete")
# 定义需要检查的两个字符串
check_str1="planning1"
check_str2="planning2"

# 声明关联数组用于存储元素存在标记
declare -A arr_index
for item in "${target_array[@]}"; do
    arr_index["$item"]=1
done

# 同时判断两个字符串是否都作为完整元素存在
if [[ ${arr_index["$check_str1"]} && ${arr_index["$check_str2"]} ]]; then
    echo "true"
else
    echo "false"
fi

上述代码运行后会输出false,因为planning1和planning2都不在给定的目标数组中,符合你的预期规则。

方案2:遍历比对法(兼容低版本bash)

如果你的环境不支持关联数组,可以用遍历匹配的方式实现,逻辑如下:

#!/bin/bash
target_array=("active" "planning" "delete")
check_str1="planning1"
check_str2="planning2"

# 封装元素存在性校验函数
check_exist() {
    local target="$1"
    shift
    for elem in "$@"; do
        [[ "$elem" == "$target" ]] && return 0
    done
    return 1
}

if check_exist "$check_str1" "${target_array[@]}" && check_exist "$check_str2" "${target_array[@]}"; then
    echo "true"
else
    echo "false"
fi

内容的提问来源于stack exchange,提问作者1DA16CS151_V.J.Harshita

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 06:39:03