Svn Bash case语法-表示“的”-@&引用;
我不熟悉下面bash脚本片段中“-@”的语义,它来自/etc/bash_completion.d/subversion。我试图理解为什么bash报告“意外标记附近的语法错误”(“在这一行中,我有两个问题:Svn Bash case语法-表示“的”-@&引用;,svn,bash,Svn,Bash,我不熟悉下面bash脚本片段中“-@”的语义,它来自/etc/bash_completion.d/subversion。我试图理解为什么bash报告“意外标记附近的语法错误”(“在这一行中,我有两个问题: “@()”在这里应该做什么 为什么bash会对这一说法感到不满 case $prev in # other cases omitted -@(F|-file|-targets)) _filedir return 0;
case $prev in
# other cases omitted
-@(F|-file|-targets))
_filedir
return 0;
;;
# other cases omitted
esac
extglob
,才能工作。这是这样做的:
shopt -s extglob
您可以检查是否已按以下方式启用它:
shopt extglob
“@”是一种表示“匹配一个且仅匹配一个”的模式。您的代码示例中似乎有一个额外的结束符,这可能是打字错误或语法错误。这完全是猜测,因为我不熟悉所有bash语法,但我认为它应该更像:
@(-F|-file|-targets))
…如果这里的其他答案-@()与一个命令参数匹配,并且额外的
)
是案例结构的一部分。我只是觉得破折号放错了地方。我找到了问题第二部分的答案,那就是为了启用“@(…)”,extglob“外壳选项需要打开。执行:
shopt -s extglob
在执行脚本之前,会消除错误。结束参数不是case语法的一部分吗?例如,请看这里:。我猜“-@(F|file|targets)”相当于“-F|--file|--targets”(其中“|”表示“或”),但我无法从文档中确认。请参阅本节底部提到的
extglob
。请参阅Lance Richardson对unwind答案的评论。