我在The Bash command :(){ :|:& };: will spawn processes to kernel death. Can you explain the syntax?中看到了如下代码
user@host$ :(){ :|:& };:
此处冒号用作函数名的标识符。冒号能否用作标识符?
我在The Bash command :(){ :|:& };: will spawn processes to kernel death. Can you explain the syntax?中看到了如下代码
user@host$ :(){ :|:& };:
此处冒号用作函数名的标识符。冒号能否用作标识符?
3条答案
按热度按时间eagi6jfj1#
是的,它可以。
zi8p0yeb2#
根据文件:
姓名
仅由字母、数字和下划线组成的单词,以字母或下划线开头。名称用作 shell 变量和函数名。也称为标识符。
不,冒号在函数名中是无效的,所以要么bomb在bash中不起作用,要么文档失败了。
我很快想到冒号可能指的是内置操作符,但我不明白这如何能得到预期的语义。
vfh0ocws3#
实现似乎不一致。你可以定义和调用一个包含冒号的函数,谷歌甚至在他们的风格指南中为包建议这样做。
虽然我注意到你不能导出或取消设置这些功能。
export
不会抱怨,但如果您在之后调用另一个bash脚本,foo:bar
将不可用。取消设置甚至会触发错误:
x一个一个一个一个x一个一个二个x