_kubectl_api-resources ➜ subprocess git:(master) ✗ sh kubectl.sh kubectl.sh: line 5: `_kubectl_api-resources': not a valid identifier
根据 POSIX 的标准,函数名要符合以下的规范。
3.231 Name In the shell command language, a word consisting solely of underscores, digits, and alphabetics from the portable character set. The first character of a name is not a digit.
可以看到,中横线不在标准支持的范围内。因此使用 /bin/sh 执行时,会看到我们上面列出的错误。
但是 bash 和 zsh 却可以支持函数中的中横线。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
➜ subprocess git:(master) ✗ cat kubectl.sh
_kubectl_api-resources() { hostname }
_kubectl_api-resources ➜ subprocess git:(master) ✗ sh kubectl.sh kubectl.sh: line 5: `_kubectl_api-resources': not a valid identifier ➜ subprocess git:(master) ✗ bash kubectl.sh bogon ➜ subprocess git:(master) ✗ zsh kubectl.sh bogon