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

Shell脚本中通配符*无法匹配文件名问题求助

问题原因与解决办法

原因

直接将带通配符*的路径赋值给变量时,Shell不会自动展开通配符,只会把整个字符串原样存入变量,所以INPUT_PATH里会保留*字符,不会替换成实际文件名。

解决方法

1. 用数组存储匹配的文件

把路径用数组赋值,Shell会自动展开通配符,将所有匹配的文件名存入数组:

INPUT_PATHS=(/group/had/muon/cometmgr/MC6/MC6A01/rootracker/oa_g4_proton_00000$(printf %03d ${j})*.rootracker)

之后遍历数组处理文件:

for file in "${INPUT_PATHS[@]}"; do
    # 这里写你的文件处理逻辑,比如打印文件名
    echo "$file"
done

2. 直接在循环中使用通配符

跳过变量赋值环节,直接把带通配符的路径放到循环里,Shell会自动展开:

for file in /group/had/muon/cometmgr/MC6/MC6A01/rootracker/oa_g4_proton_00000$(printf %03d ${j})*.rootracker; do
    # 文件处理逻辑
    echo "$file"
done

3. 处理无匹配文件的情况

如果担心没有匹配文件时,Shell会把带*的字符串当作无效文件名,可以开启nullglob选项,让无匹配时返回空:

shopt -s nullglob
INPUT_PATHS=(/group/had/muon/cometmgr/MC6/MC6A01/rootracker/oa_g4_proton_00000$(printf %03d ${j})*.rootracker)
shopt -u nullglob  # 用完后可以关闭该选项

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 08:52:14