bash 在 bash 脚本中添加 '(' 字符的语法错误

bash syntax error for adding '(' character in bash script

我是运行在Linux命令行下的命令

cp !(non_*).txt some_folder/

它按预期工作(即,将当前文件夹中除以 'non_' 开头的文件之外的所有 *.txt 文件复制到 some_folder。)

但是当同一行被添加到脚本文件并执行它时 ./script.sh

它抛出以下错误。

./script.sh: line 1: syntax error near unexpected token `('

./script.sh: line 1: ` cp !(oam_cfg*).txt kk/'

这里可以更正什么?

仅供参考:我正在尝试将当前文件夹中除以 'non_' 开头的文件之外的所有 *.txt 文件复制到 some_folder。

正如 Jetchisel 一个小时前评论的那样,您需要打开扩展的 globbing。

一个例子:

$: touch foo.txt bar.txt  # create a file
$: echo +(foo*txt)        # use an extended glob, which fails on syntax
bash: syntax error near unexpected token `('
$: shopt -s extglob  # turn extended globbing *ON*
$: echo +(foo*txt)   # same command now succeeds
foo.txt
$: echo !(foo).txt   # negative works as well
bar.txt