Bash中校验字符串数组匹配并获取本地无匹配元素
解决方案
要获取local数组中在remote里没有匹配项的元素,核心思路是遍历local的每个元素,检查remote中是否存在包含该元素的文件名,收集所有无匹配的元素。
Bash 实现示例
# 定义初始数组 local=("aa" "ab" "ac" "ad" "ae") remote=("ab.tar.gz" "ac.tar.gz" "ad.tar.gz" "ae.tar.gz" "af.tar.gz") # 初始化存储无匹配元素的数组 no_match=() # 遍历local数组每个元素 for item in "${local[@]}"; do match_found=0 # 检查remote中是否有包含当前元素的文件 for file in "${remote[@]}"; do if [[ "$file" == *"$item"* ]]; then match_found=1 break fi done # 无匹配则加入结果数组 if [[ $match_found -eq 0 ]]; then no_match+=("$item") fi done # 输出结果 echo "无匹配的local元素: ${no_match[@]}"
执行后会输出:无匹配的local元素: aa
Python 实现示例
local = ["aa", "ab", "ac", "ad", "ae"] remote = ["ab.tar.gz", "ac.tar.gz", "ad.tar.gz", "ae.tar.gz", "af.tar.gz"] no_match = [item for item in local if not any(item in file for file in remote)] print("无匹配的local元素:", no_match)
执行后输出:无匹配的local元素: ['aa']
逻辑说明
- 外层遍历local的每个子串
- 对每个子串,检查remote中的所有文件名是否包含它(用
*$item*通配匹配或in运算符) - 若遍历完所有remote文件都没找到匹配,则将该子串加入结果集合
内容的提问来源于stack exchange,提问作者michel
相关产品推荐
相关产品推荐

