我尝试将存在异常的本地目录复制到 Bash 脚本中的另一个位置,但一直收到语法错误消息。我最终得到了一个可以复制我的问题的最小示例……这种情况只发生在函数内部。
因此这可以按预期工作:
#!/usr/bin/env bash
rm -rf /tmp/adir/ && mkdir --parents /tmp/adir/
shopt -s extglob dotglob
cp -ar /some/dir/subdirectory/!(tests|.git) /tmp/adir/
shopt -u extglob dotglob
...但这不起作用:
#!/usr/bin/env bash
a_function() {
rm -rf /tmp/adir && mkdir --parents /tmp/adir
shopt -s extglob dotglob
cp -ar /some/dir/subdirectory/!(tests|.git) /tmp/adir
shopt -u extglob dotglob
}
a_function
后者会引发语法错误:
./test.sh: line 6: syntax error near unexpected token `('
./test.sh: line 6: ` cp -ar /some/dir/subdirectory/!(tests|.git) /tmp/adir/'
Bash 版本:GNU bash,版本 5.2.15(1)-release(x86_64-pc-linux-gnu)
希望有人可以帮忙。
不仅必须
extglob
在使用它的行上设置,还必须在声明该函数的地方设置。请参阅https://stackoverflow.com/q/65533232/1030675以了解相同的问题和详细答案。