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

Bash脚本执行结果与终端直接执行不一致问题求助

Bash脚本中find命令通配符失效的问题与解决

问题描述

直接在终端执行以下find命令,能正常返回大量匹配的.txt文件:

find . -xdev -type d -path ./sys -o -path ./proc -o -path ./run -prune -o -iname "*.txt"

但把这个逻辑封装成脚本(脚本接收$1作为路径参数,匹配模式通过后续参数传入)后,执行bul . *.txt时仅返回单个结果。尝试开启extglob、调整命令格式等操作都无法解决问题。

原因分析

核心问题是终端的通配符提前展开:当你输入bul . *.txt时,当前shell会先把*.txt解析成当前目录下已存在的所有.txt文件名,再把这些具体文件名作为参数传给脚本。此时脚本里的find命令拿到的不是通配符*.txt,而是一堆具体的文件名,导致-iname参数无法按预期匹配所有符合条件的文件,最终结果异常。

解决方法

执行脚本时,用双引号包裹通配符*.txt,阻止终端提前展开:

bul . "*.txt"

这样脚本接收到的就是原始的通配符字符串,find命令可以正常用它去遍历匹配所有符合条件的文件,返回正确的大量结果。

内容的提问来源于stack exchange,提问作者srctghn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 21:22:37