我在The Bash command :(){ :|:& };: will spawn processes to kernel death. Can you explain the syntax?中看到了如下代码
user@host$ :(){ :|:& };:
此处冒号用作函数名称的标识符。 冒号可以用作标识符吗?
答案 0 :(得分:1)
名称
单词由字母,数字和下划线组成,以字母或下划线开头。名称用作shell变量和函数名称。也称为标识符。
不,冒号在函数名称中无效。所以要么炸弹在bash中不起作用,要么文档失败。
我很快就认为冒号可能会引用built-in operator,但我不知道它是如何得到预期的语义。
答案 1 :(得分:1)
是的,它可以。
$ :()
> {
> echo "hello from : :)"
> }
$ :
hello from : :)
答案 2 :(得分:0)
实施似乎不一致。您可以定义并调用包含冒号的函数,Google甚至会为其style guide中的包建议。
虽然我注意到你无法导出或取消设置这些功能。
#!/usr/bin/env bash
foo:bar() {
echo "foo:bar called"
}
foo:bar
export -f foo:bar
unset foo:bar
export
不会抱怨,但如果您之后再调用另一个bash脚本,则foo:bar
不可用。
未设置甚至会触发错误:
/foo/bar: line 11: unset: `foo:bar': not a valid identifier
$ bash --version
GNU bash, version 4.2.46(1)-release (x86_64-redhat-linux-gnu)