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

Bash脚本如何为参数添加通配符扩展修复find查找异常

问题原因

故障核心是FILE="'*$FILE*'"这行赋值错误:你额外添加的单引号被当成了变量的实际内容存储,而不是Shell语法层面的字符串包裹符。
你在交互Shell中直接执行find 目标路径 -name '*test*'时,外层单引号是Shell解析用的语法标记,作用是告诉Shell不要提前展开*通配符,这对单引号本身不会作为参数传给find命令。但在脚本的赋值语句中,你把单引号写在了双引号包裹的赋值内容里,Shell会直接把这两个单引号识别为普通字符存入FILE变量,最终传递给find的-name参数真实值为'*test*'——也就是要求find匹配「文件名首尾带单引号、中间包含搜索关键词」的文件,当然匹配不到你想要的结果。你开-x调试参数看到的大量转义引号,就是Shell在调试输出中明确标识:这些单引号是参数内容的一部分,不是用来包裹字符串的语法符号。

修复方案

去掉赋值时多余的单引号,同时给所有变量引用加上双引号(避免搜索路径、关键词包含空格时出现参数拆分错误),修正后完整代码如下:

#!/bin/bash
echo ""
read -p "-Write file you need- " FILE
read -p "-Write the folder to search- " FOLDER

# 直接拼接通配符即可,不需要额外套单引号
FILE="*$FILE*"
# 变量引用统一加双引号,兼容含空格的路径/文件名
find "$FOLDER" -name "$FILE"

提示:给变量引用加双引号是Bash脚本编写的通用最佳实践,可以规避绝大多数特殊字符、空格导致的执行异常。

调试现象补充说明

你之前加echo $FILE看到输出为'*test*',并不是变量里没有单引号,而是echo把变量中存储的单引号字符原样打印了出来——你看到的单引号是变量值本身的内容,不是echo输出时自动添加的语法标识。

内容的提问来源于stack exchange,提问作者Matías Mercado

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 06:21:28