变量的命名规范
- 变量名由数字、字母、下划线组成;
- 必须以字母或者下划线开头;
- 不能使用 Shell 里的关键字(通过 help 命令可以查看保留关键字)。
特殊变量
| 变量 | 含义 |
|---|---|
| $0 | 当前脚本的文件名。 |
| $n(n≥1) | 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是 $1,第二个参数是 $2。 位置参数: https://www.yuque.com/docs/share/7e8e4a83-c89f-43b3-91e5-402d2f8d9b41?# |
| $# | 传递给脚本或函数的参数个数。 |
| $* | 传递给脚本或函数的所有参数。 Shell $*和$@的区别: https://www.yuque.com/docs/share/c57e13e2-0e4e-4be0-a8ee-62b4e1f1c8f1?# |
| $@ | 传递给脚本或函数的所有参数。Shell $*和$@的区别: https://www.yuque.com/docs/share/c57e13e2-0e4e-4be0-a8ee-62b4e1f1c8f1?# |
| $? | 上个命令的退出状态,或函数的返回值: https://www.yuque.com/docs/share/820da61b-1d6d-44c9-93e7-978aa78ffdc3?# |
| $$ | 当前 Shell 进程 ID,就是这些脚本所在的进程 ID。 |
定义与使用变量
var='value'echo ${var}//输出结果${var}var="value"echo ${var}//输出结果value
变量名外面的花括号{ }是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界
定义变量时,变量的值可以由单引号' '包围,也可以由双引号" "包围,单引号则不解析字符串内的变量引用,双引号则是输出时会先解析里面的变量和命令。
注:推荐给所有变量加上花括号{ },这是个良好的编程习惯。
命令的结果赋值给变量
Shell 也支持将命令的执行结果赋值给变量,常见的有以下两种方式:
//命令的结果赋值给变量var=`command`var=$(command)//log.txt文件内容hello world//使用打印变量log=$(cat log.txt)echo $log//输出结果:hello world
推荐使用第二种方式,第一种方式把命令用反引号 (位于 Esc 键的下方)包围起来,反引号和单引号非常相似,容易产生混淆
只读变量
使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。
下面的例子尝试更改只读变量,结果报错:
#!/bin/bashvar="hello Eden"readonly varvar="hello Eden"
运行脚本,结果如下: bash: var: This variable is read only.
删除变量
使用 unset 命令可以删除变量
#!/bin/sh
var="hello Eden"
unset var
echo $var
//运行脚本,没有任何输出结果:
