gpt4 book ai didi

bash - bash 完成脚本的令人困惑的情况

转载 作者:行者123 更新时间:2023-12-04 05:31:44 25 4
gpt4 key购买 nike

我无法理解以下代码在 bash 完成脚本中的作用:

    case "$last" in
+\(--import|-i\))
_filedir '+(txt|html)';;

什么时候遇到过这种情况?我认为上面的第二行会是这样的
--import|-i)

这对我来说很有意义。我找到了我的 bash_completion.d '+\\(' 的目录但那是唯一一个出现的,所以我想这并不常见。

最佳答案

这段代码在没有上下文的情况下确实令人费解。事实上,它匹配两个文字字符串 -

$ case "+(--import" in +\(--import|-i\)) echo match ;; esac
match
$ case "-i)" in +\(--import|-i\)) echo match ;; esac
match

它看起来类似于扩展的 glob 模式 +(--import|-i) ,但在这种形式中,它既不是文字模式(需要转义管道)也不是实际模式(需要取消括号转义)的匹配项。我猜是“错误”,但 bash 补全是疯狂元编程的雷区,所以不可能在没有看到整个脚本的情况下说。

来自 bash(1)

If the extglob shell option is enabled using the shopt builtin, several extended pattern matching operators are recognized. In the following description, a pattern-list is a list of one or more patterns separated by a |. Composite patterns may be formed using one or more of the following sub-patterns:

[...]

          +(pattern-list)
Matches one or more occurrences of the given patterns

关于bash - bash 完成脚本的令人困惑的情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12489020/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com