UNIX环境下带通配符的异长度数组比对方案咨询
匹配带随机后缀文件名的实现方案
你可以直接用 Bash 内置的模式匹配实现需求,修正后的可运行代码如下:
# 加载环境变量 . ~/.env # 存储纯文件名的参考数组 defaultlist=("file1" "file2" "file3") # 读取目标路径下所有csv文件的完整路径到检查数组 # 请将下方/your/target/path/替换为你实际的文件存放路径 checklist=("/your/target/path/"*.csv) # 遍历所有待检查的目标文件名 for target_name in "${defaultlist[@]}" do found=0 # 遍历所有csv文件路径逐个匹配 for full_path in "${checklist[@]}" do # 提取路径中的纯文件名,匹配规则:前缀为目标文件名,后缀为.csv,中间可带任意字符 if [[ $(basename "$full_path") == "$target_name"*.csv ]]; then found=1 break fi done if [[ $found -eq 1 ]]; then echo "$target_name File present" else echo "$target_name not present" fi done
核心逻辑说明
- 原代码的错误点:直接用正则匹配整个数组不会自动遍历数组元素,Bash 没有提供直接批量匹配数组元素的语法,需要手动嵌套循环逐个校验
- 用
basename命令提取完整路径中的纯文件名部分,排除前缀路径的干扰 - 匹配规则
$target_name*.csv天然支持文件名带随机后缀的场景,只要文件名开头是你要找的目标名称、后缀是csv就会命中 - 不受两个数组长度不一致的影响,匹配到第一个符合要求的文件就会跳出内层循环,运行效率更高
内容的提问来源于stack exchange,提问作者nick
相关产品推荐
相关产品推荐

