linux 冒号可以用作标识符吗?

gzjq41n4  于 2023-01-25  发布在  Linux
关注(0)|答案(3)|浏览(145)

我在The Bash command :(){ :|:& };: will spawn processes to kernel death. Can you explain the syntax?中看到了如下代码

user@host$ :(){ :|:& };:

此处冒号用作函数名的标识符。冒号能否用作标识符?

eagi6jfj

eagi6jfj1#

是的,它可以。

$ :()
> {
> echo "hello from : :)"
> }
$ :
hello from : :)
zi8p0yeb

zi8p0yeb2#

根据文件:
姓名
仅由字母、数字和下划线组成的单词,以字母或下划线开头。名称用作 shell 变量和函数名。也称为标识符。
不,冒号在函数名中是无效的,所以要么bomb在bash中不起作用,要么文档失败了。
我很快想到冒号可能指的是内置操作符,但我不明白这如何能得到预期的语义。

vfh0ocws

vfh0ocws3#

实现似乎不一致。你可以定义和调用一个包含冒号的函数,谷歌甚至在他们的风格指南中为包建议这样做。
虽然我注意到你不能导出或取消设置这些功能。

#!/usr/bin/env bash

foo:bar() {
  echo "foo:bar called"
}

foo:bar

export -f foo:bar

unset foo:bar

export不会抱怨,但如果您在之后调用另一个bash脚本,foo:bar将不可用。
取消设置甚至会触发错误:
x一个一个一个一个x一个一个二个x

相关问题