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
小写的(!)。幸运的是,只有启用历史扩展才重要。