代码之家  ›  专栏  ›  技术社区  ›  Lance Richardson

Bash case语法-“-@”的含义

  •  5
  • Lance Richardson  · 技术社区  · 16 年前

    我不熟悉下面bash脚本片段中“-@”的语义,它来自/etc/bash_completion.d/subversion。我试图理解为什么bash报告“意外标记附近的语法错误”(在这一行,我有两个问题:

    1. case $prev in
                      # other cases omitted
          -@(F|-file|-targets))
              _filedir
              return 0;
              ;;
                      # other cases omitted
              esac
      
    4 回复  |  直到 16 年前
        1
  •  4
  •   unwind    16 年前

    pattern matching

    正如一位评论者所指出的(谢谢!)这需要Bash的 extglob

    shopt -s extglob
    

    shopt extglob
    
        2
  •  1
  •   Lance Richardson    16 年前

    我找到了问题第二部分的答案,即为了启用“@(…)”,需要打开“extglob”shell选项。执行:

    shopt -s extglob
    

        3
  •  0
  •   Andrew Barnett    16 年前

    “@”是一个模式,意思是“只匹配一个”。你的代码示例中似乎有一个额外的结尾部分,要么是拼写错误,要么是语法错误。

        4
  •  0
  •   DGM    16 年前

    这完全是一个猜测,因为我不熟悉所有的bash语法,但我认为它应该更像:

    @(-F|-file|-targets))
    

    ) 是案例结构的一部分。我只是觉得破折号放错地方了。