【问题标题】:Using a plus sign at the end of a bash function name在 bash 函数名称的末尾使用加号
【发布时间】:2017-09-29 15:58:23
【问题描述】:

我需要创建一个名称以+ 结尾的bash 函数。例如foo+。这些工作:

+foo() { true; }
foo+bar() { true; }

但事实并非如此:

foo+() { true; }
-bash: syntax error near unexpected token `}'

为什么不呢?它不会抱怨+。有没有办法解决这个问题?

【问题讨论】:

    标签: linux bash syntax


    【解决方案1】:

    发生这种情况是因为 +() 是一个 extglob(启用时),所以 bash 看到 someglob { true; } 是无效的。

    这是它在没有 extglob 的情况下工作:

    $ shopt -u extglob
    $ foo+() { echo bar; }
    

    这里是用 extglob 打破的:

    $ shopt -s extglob 
    $ foo+() { echo bar; }
    bash: syntax error near unexpected token `}'
    

    解决方法包括在() 之前添加一个空格或使用function 关键字:

    foo+ () { echo bar; }
    function foo+() { echo bar; }
    

    【讨论】:

    • 当我是 root 用户时,使用 function 不起作用。你知道为什么吗?
    • function 是一个 bash 扩展,如果使用 shdash 则不起作用