我正在尝试通过终端在 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
您正在使用扩展的通配模式。为了使其在您的脚本中起作用,请确保您是
- 用于
bash
执行脚本,以及 extglob
在脚本中启用shell 选项。
您可以extglob
使用以下命令启用 shell 选项
shopt -s extglob
在脚本源中。