Этот вопрос слабо связан с одним из моих предыдущих . TL; DR из ответа Муру состоит в том, что символы в имени функции должны быть в Переносимом наборе символов , чтобы быть действительным для имени функции. Проблема в том, что пробел находится в списке (символ <space>
или <U0020>
), поэтому я не понимаю, почему я не могу этого сделать:
$ С другими оболочками:
$ 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
'(){ echo "Hullo";}
bash: `' '': not a valid identifier
$ hello С другими оболочками:
$ 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
'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
Позвольте мне подчеркнуть соответствующую часть:
слово, состоящее только из символов нижнего подчеркивания, цифр и alphabetics от переносимого набора символов
Другие символы в переносимом наборе символов не позволяются. Так как символ находится в переносимом наборе символов, необходимое, но не достаточный, условие.