只見代碼在The Bash command :(){ :|:& };: will spawn processes to kernel death. Can you explain the syntax?如下用作標識符的函數名冒號可以用作標識符嗎?
[email protected]$ :(){ :|:& };:
這裏結腸。 冒號可以用作標識符嗎?
只見代碼在The Bash command :(){ :|:& };: will spawn processes to kernel death. Can you explain the syntax?如下用作標識符的函數名冒號可以用作標識符嗎?
[email protected]$ :(){ :|:& };:
這裏結腸。 冒號可以用作標識符嗎?
是的,它可以。
$ :()
> {
> echo "hello from : :)"
> }
$ :
hello from : :)
name
A word consisting solely of letters, numbers, and underscores, and beginning with a letter or underscore. Names are used as shell variable and function names. Also referred to as an identifier.
號,冒號是不是在功能名稱中無效。所以要麼炸彈不能用bash工作,要麼文檔失敗。
我不久就想到冒號可能指的是built-in operator,但我不明白這怎麼能得到預期的語義。
有一個在該頁面的例子。 「 $的ulimit -u 50 $:(){:|:& };: -bash:叉:資源暫時不可用 」 這意味着他用冒號作爲函數名,對不對? –
實現似乎不一致。你可以定義和調用一個包含冒號的函數,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)
是的,它工作。你可以有任何網址說冒號可以用作標識符? –
有沒有這樣的網址(我知道),但請看看討論:http://old.nabble.com/Document-what's-allowed-in-function-names-td31361546.html;它可能對你有意思。 –
我認爲你可以把它留在這裏:)謝謝你,這是愉快的閱讀,但它當然不是真的。 John Skeet,Darin Dimitrov,Balus--他們是非常棒的人。 –