问题说明
在shell下遇到一个赋值的问题
1 | [rancho ~]$ a=10 |
shell下的命令格式
shell下我们常用的命令格式如下:
1 | var=value #变量赋值,例如a=1 |
实际上,bash中的一个简单命令的完整格式如下:
1 | var=value ... cmd args >redirection ... |
一个完整的简单命令由三部分组成:变量赋值部分、命令和参数部分、重定向部分,只是很多时候我们会省略一些部分的内容。
其中:
- 变量赋值和重定向可以有多个
- 变量赋值必须在cmd前面,并且变量名必须符合bash要求的命令规则
- 定义变量时,普通变量名是字母、数字、下划线的组合,且不能以数字开头
- 调用变量时,在变量名前加
$
,shell有一部分特殊变量如$0 $1 $$
对于变量赋值:
- 如果有变量赋值而没有命令执行部分,则变量赋值在当前shell下生效
- 如果有变量赋值也有命令执行部分,则变量赋值只作用于改命令,对当前shell无影响
- 如果变量名不符合bash的命令规范,则不认为是变量赋值语句,而是当作cmd部分
问题说明
demo$a
不是一个有效的变量名,所以会当作cmd来执行,但是在执行之前会从左到右执行shell命令解析规则,得到demo10=123
,之后将其作为命令进行执行,找不到改命令从而报错。类似的,输入123das=10
也会报这种错误。