【发布时间】:2017-09-29 15:58:23
【问题描述】:
我需要创建一个名称以+ 结尾的bash 函数。例如foo+。这些工作:
+foo() { true; }
foo+bar() { true; }
但事实并非如此:
foo+() { true; }
-bash: syntax error near unexpected token `}'
为什么不呢?它不会抱怨+。有没有办法解决这个问题?
【问题讨论】:
我需要创建一个名称以+ 结尾的bash 函数。例如foo+。这些工作:
+foo() { true; }
foo+bar() { true; }
但事实并非如此:
foo+() { true; }
-bash: syntax error near unexpected token `}'
为什么不呢?它不会抱怨+。有没有办法解决这个问题?
【问题讨论】:
发生这种情况是因为 +() 是一个 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; }
【讨论】:
function 不起作用。你知道为什么吗?
function 是一个 bash 扩展,如果使用 sh 或 dash 则不起作用