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

Bash脚本使用!(匹配模式)语法报意外token '('错误如何解决

问题根因

你用到的!(non_*)语法属于Bash的**扩展通配符(extglob)**特性,该特性在交互式命令行环境默认开启,但执行脚本时Bash默认不会主动开启extglob,因此会将(识别为非法语法,触发报错。另外如果你的脚本shebang行写的是#!/bin/sh,也会因为sh不支持该扩展特性导致报错。

修复方案

方案1:开启extglob扩展特性(保留原写法)

在脚本最开头添加如下两行配置即可:

#!/bin/bash
shopt -s extglob

之后你原来的cp !(non_*).txt some_folder/命令即可在脚本中正常运行。

方案2:使用POSIX兼容写法(无扩展依赖)

如果希望脚本兼容性更强,可直接用find命令实现相同需求,无需开启任何扩展特性:

find . -maxdepth 1 -type f -name "*.txt" ! -name "non_*.txt" -exec cp {} some_folder/ \;

参数说明:

  • -maxdepth 1:仅搜索当前目录,不递归遍历子目录
  • ! -name "non_*.txt":排除所有以non_为前缀的txt文件
  • -exec cp {} some_folder/ \;:将匹配到的所有文件复制到目标目录

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 14:36:03