bash 变量可接受的初始字符列表

bash 变量可接受的初始字符列表

bash 变量中可接受的字符有哪些?

有人可以指出 bash 手册页中描述 bash 变量的可接受名称的位置吗?

我查看并提出了很多信息(请参阅问题编辑),但没有明确的答案。

答案1

您可以为变量赋值(使用var=value)。有一个之间的细微差别范围和一个多变的:

A范围是一个存储值的实体。它可以是一个姓名、数字或下面列出的特殊字符之一。 A多变的是一个由 a 表示的参数姓名

名称定义为:

姓名 仅由字母、数字和下划线组成且以字母或下划线开头的单词。姓名s 用作 shell 变量和函数名称。也称为标识符

(这是 Bash 手册中的定义,POSIX 可能也有类似的定义。)

因此,任何与正则表达式[a-zA-Z_][a-zA-Z_0-9]*(假设 ASCII 字符范围)匹配的内容都是变量的有效名称。 Unicode 字符和标点符号不起作用。

这几乎是大多数编程语言中变量名称所支持的字符集,尽管有些语言也支持 Unicode。以数字开头的单词被视为数字(请注意,像0xabcd和 这样的东西123e3通常是有效数字),破折号通常被视为减号运算符,a-b两个变量(而不是一个变量)的简单算术运算也是如此。等等。

不属于该格式的参数是编号的位置参数(脚本/函数参数,可使用set)和特殊参数。请注意,_(单个下划线)是后者之一,虽然您可以毫无错误地分配给它,但它没有多大用处,因为它会立即重置。

这些都很好:

$ a123=foo __=bar
$ echo $a123 $__
foo bar

但:

$ _=foo echo bar >/dev/null 
$ echo $_
bar

至于大写的,有一个变量列表对于 Bash 或其他 Bourne-ish shell 来说是特殊的(忽略 readline 变量,它们在这里不相关)。它们似乎都以大写字母开头,除了那里都是histchars小写的(!)。幸运的是,只有启用历史扩展才重要。

相关内容