这个问题与我之前的一个问题大致相关。TL;来自muru 的答案的 DR是函数名称中的字符必须在可移植字符集中才能对函数名称有效。问题是空间在列表中(<space>
或<U0020>
字符),这就是为什么我对为什么不能这样做感到困惑:
$ $' '(){ echo "Hullo";}
bash: `' '': not a valid identifier
$ hello$' 'world(){ echo "hi";}
bash: `hello' 'world': not a valid identifier
与其他外壳:
$ mksh -c '\ (){ echo "Hello";} '
mksh: : invalid function name
$ ksh -c '\ (){ echo "Hello";} '
ksh: : invalid function name
$ dash -c '\ (){ echo "Hello";} '
dash: 1: Syntax error: Bad function name
让我强调一下相关部分:
不允许使用可移植字符集中的其他字符。字符在可移植字符集中是一个必要条件,但不是充分条件。