定义变量
定义变量时,变量名不加美元符号($),并且变量名和等号中不能有空格。如:
1 | tempVar="variable" |
同时,变量名的命令规则如下:
- 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头
- 中间不能有空格,可以使用下划线 _
- 不能使用标点符号
- 不能使用bash里的关键字(可用 compgen -k 命令查看保留关键字)。
使用变量
使用一个定义过的变量,只要在变量名前面加$符号即可,如:
1 | tempVar="variable" |
变量名外面的大括号是可选的,加大括号是为了帮助解释器识别变量的边界,防止出现识别错误变量。如:
1 | str="shell" |
打印出来就是I am learning shellskill,如果没有大括号,则打印出来的内容是I am learning,系统识别strskill为一个变量,但并没有此变量,因此打印变量为空。所以使用变量时建议加上大括号,更为规范。
readonly 只读变量
使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。如:
1 | #!/bin/bash |
运行时报错:
1 | /bin/sh: NAME: This variable is read only. |
删除变量
使用 unset 命令就可以删除变量。
1 | unset myVar |
变量被删除后不能再次使用。并且 unset 命令不能删除只读变量。
(当脚本文件规模不大时,要删除变量的话直接在脚本里把变量去掉就行了。)
变量类型
- 环境变量
- 本地变量
- 局部变量
- 位置变量
- 特殊变量(bash内置变量,也称系统变量)
环境变量
1 | export var_name=value //作用域为当前shell进程及其子进程` |
给Linux系统配置过JDK的同学应该对这个变量很熟悉
本地变量
1 | var_name=value //本地变量,作用域为当前shell进程,对当前shell外的其他shell进程,v包括当前shell,子shell进程均无效 |
局部变量
1 | local var_name=value //局部变量,作用域为当前代码段,常用于函数 |
局部变量也是一种本地变量
位置变量
1 | $1,$2,$3, .... //用来引用脚本的参数 |
特殊变量
1 | $# //是传给脚本的参数个数 |
1 | bash内建环境变量,这些变量不能当作自定义变量使用 |