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

111*_*--- 5 bash variable syntax

bash 变量中可接受的字符是什么?

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

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

ilk*_*chu 12

您可以为变量赋值(使用var=value)。参数变量之间很好的区别

参数是存储的值的实体。它可以是名称、数字或下面列出的特殊字符之一。甲变量是由表示的参数名称

名称定义为

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

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

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

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

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

这些都很好:

$ a123=foo __=bar
$ echo $a123 $__
foo bar
Run Code Online (Sandbox Code Playgroud)

但:

$ _=foo echo bar >/dev/null 
$ echo $_
bar
Run Code Online (Sandbox Code Playgroud)

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