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。以数字开头的单词被视为数字(注意像0xabcd和123e3通常是有效数字),破折号通常被视为减号运算符,因此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这一切小写(!)。幸运的是,只有启用历史扩展才重要。