111--- Asked: 2018-03-08 15:02:15 +0800 CST2018-03-08 15:02:15 +0800 CST 2018-03-08 15:02:15 +0800 CST bash 变量可接受的初始字符列表 772 bash 变量中可接受的字符是什么? 有人可以指出 bash 手册页中描述 bash 变量可接受名称的位置吗? 我查看并想出了很多信息(请参阅问题编辑),但没有明确的答案。 bash variable 1 个回答 Voted Best Answer ilkkachu 2018-03-08T15:38:34+08:002018-03-08T15:38:34+08:00 您可以为变量赋值(使用var=value)。参数和变量之间有一个很好的区别: 参数是存储值的实体。它可以是名称、数字或下面列出的特殊字符之一。变量是由名称表示的参数。 并且名称定义为: 名称 仅由字母、数字和下划线组成并以字母或下划线开头的单词。Name用作 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都是小写(!)。幸运的是,只有启用历史扩展才重要。
您可以为变量赋值(使用
var=value
)。参数和变量之间有一个很好的区别:并且名称定义为:
(这是 Bash 手册中的定义,POSIX 可能有类似的东西。)
因此,与正则表达式匹配的任何内容
[a-zA-Z_][a-zA-Z_0-9]*
(假设 ASCII 字符范围)都是变量的有效名称。Unicode 字符和标点符号不起作用。这几乎是大多数编程语言中变量名支持的字符集,尽管有些也支持 Unicode。以数字开头的单词被视为数字(请注意,像
0xabcd
和123e3
通常是有效数字),并且破折号通常被视为减号运算符,因此a-b
是两个变量的简单算术运算,而不是一个变量。等等。不属于该格式的参数是编号的位置参数(脚本/函数参数,可分配
set
)和特殊参数。请注意,_
(单个下划线)是后者之一,虽然您可以分配给它而不会出错,但它并没有多大用处,因为它会立即重置。这些很好:
但:
至于大写的,有一个Bash 或其他 Bourne-ish shell 特有的变量列表(忽略 readline 变量,它们在这里不相关)。它们似乎都以大写字母开头,除了那
histchars
都是小写(!)。幸运的是,只有启用历史扩展才重要。