Bash脚本和正则expression式问题

让我们想象一下,在我的服务器上,我有以下文件:

foo@bar:/var/log/foo$ ls fooFile1 fooFile2 logFile logFile.1 logFile.2 

我想创build一个包含每个文件但是logFile。*的档案。 所以我想出了这个命令:

foo@bar:~$ tar -czf foo.tar.gz /var/log/foo/!(logFile.*)

它工作正常! 但是,当试图创build一个执行相同工作的脚本时:

 #!/bin/bash tar -czf foo.tar.gz /var/log/foo/!(logFile.*) 

我遇到以下错误:

 ./test.sh: line 3: syntax error near unexpected token '(' ./test.sh: line 3: 'tar -czf foo.tar.gz /var/log/foo/!(logFile.*)' 

问题不是tar相关的(我遇到了使用ls代替tar的相同问题)

我不明白这个错误是从哪里来的。 谁能告诉我我错在哪里?

会见Ubuntu 12.04

将此行放在shebang下方:

 shopt -s extglob 

在您的脚本中启用扩展的glob选项。

!(logFile.*)是扩展的glob模式,需要启用extglob