为什么我会在意外令牌附近发现"语法错误`('"?

时间:2015-11-25 19:32:32

标签: bash unix

我想浏览许多目录并删除除了符合某些条件的文件以外的所有文件。我有以下bash脚本:

#!/bin/bash
for i in */
do
  cd $i
  rm !(*M.*)
  cd ..
done

但是,当我运行脚本时,我收到以下错误:

script1.sh: line 5: syntax error near unexpected token `('
script1.sh: line 5: `    rm !(*M.*)'

可能有什么不对?我使用的是Ubuntu 14.04。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

我认为你应该启用 extglob 来使用反转或负面通配符:

shopt -s extglob

请注意,您可以随时保持此状态,这无害。

也就是说,您不必在代码中使用循环,而是可以直接放入脚本中:

rm */!(*M.*)

您可以访问此帖子了解其他解决方案: here