我不熟悉下面bash脚本片段中" - @"的语义,它来自/etc/bash_completion.d/subversion.我试图理解为什么bash报告"意外令牌附近的语法错误"(在这一行上,我有两个问题:
为什么bash会对这个陈述不满意?
case $prev in
# other cases omitted
-@(F|-file|-targets))
_filedir
return 0;
;;
# other cases omitted
esac
Run Code Online (Sandbox Code Playgroud)这里的“@(...)”是 Bash模式匹配语法的一部分。它是一个“或”,它只匹配列出的模式之一,并用管道字符分隔。
最初的破折号只是从表达式中分解出来;“-@(a|b|c)”与“@(-a|-b|-c)”相同,但更短。
正如评论者所指出的(谢谢!)这需要启用 Bashextglob才能工作。这样做是这样的:
shopt -s extglob
Run Code Online (Sandbox Code Playgroud)
您可以检查是否已经启用它,如下所示:
shopt extglob
Run Code Online (Sandbox Code Playgroud)