意外标记“(”附近出现语法错误或无法正确执行

意外标记“(”附近出现语法错误或无法正确执行

我正在尝试通过终端在 X 目录上执行某些操作,但不在 Y 目录上执行某些操作。当我做

cd /mnt/dir/ && 
for i in !(dira|dirb|dird)/; do echo "$i"; done && 
cd y/ && for i in !(dirz)/; do echo "$i"; done

在终端上一切都很好,但是当我尝试将其放在 .sh 文件上并执行它时,我得到 or syntax error near unexpected token ( ,如果我转义(|我只是将for部分作为输出(例如!(dira|dirb|dird)/:)

如何解决此问题,以便可以使其在 .sh 文件甚至 .bashaliases 文件中的别名上运行?

答案1

您正在使用扩展的通配模式。为了使其在您的脚本中起作用,请确保您是

  1. 用于bash执行脚本,以及
  2. extglob在脚本中启用shell 选项。

您可以extglob使用以下命令启用 shell 选项

shopt -s extglob

在脚本源中。

相关内容