Bash 脚本和正则表达式问题
Bash script and regex issue
假设在我的服务器上,我有以下文件:
foo@bar:/var/log/foo$ ls
fooFile1 fooFile2 logFile logFile.1 logFile.2
我想创建一个包含除 logFile.* 之外的所有文件的存档。所以我想出了命令:
foo@bar:~$ tar -czf foo.tar.gz /var/log/foo/!(logFile.*)
而且效果很好!但是,当尝试创建执行相同工作的脚本时:
#!/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
假设在我的服务器上,我有以下文件:
foo@bar:/var/log/foo$ ls
fooFile1 fooFile2 logFile logFile.1 logFile.2
我想创建一个包含除 logFile.* 之外的所有文件的存档。所以我想出了命令:
foo@bar:~$ tar -czf foo.tar.gz /var/log/foo/!(logFile.*)
而且效果很好!但是,当尝试创建执行相同工作的脚本时:
#!/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