变量的命名规范

  • 变量名由数字、字母、下划线组成;
  • 必须以字母或者下划线开头;
  • 不能使用 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。

定义与使用变量

  1. var='value'
  2. echo ${var}
  3. //输出结果
  4. ${var}
  5. var="value"
  6. echo ${var}
  7. //输出结果
  8. value

变量名外面的花括号{ }是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界
定义变量时,变量的值可以由单引号' '包围,也可以由双引号" "包围,单引号则不解析字符串内的变量引用,双引号则是输出时会先解析里面的变量和命令。

注:推荐给所有变量加上花括号{ },这是个良好的编程习惯。

命令的结果赋值给变量

Shell 也支持将命令的执行结果赋值给变量,常见的有以下两种方式:

  1. //命令的结果赋值给变量
  2. var=`command`
  3. var=$(command)
  4. //log.txt文件内容
  5. hello world
  6. //使用打印变量
  7. log=$(cat log.txt)
  8. echo $log
  9. //输出结果:
  10. hello world

推荐使用第二种方式,第一种方式把命令用反引号 (位于 Esc 键的下方)包围起来,反引号和单引号非常相似,容易产生混淆

只读变量

使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。

下面的例子尝试更改只读变量,结果报错:

  1. #!/bin/bash
  2. var="hello Eden"
  3. readonly var
  4. var="hello Eden"

运行脚本,结果如下: bash: var: This variable is read only.

删除变量

使用 unset 命令可以删除变量

#!/bin/sh
var="hello Eden"
unset var
echo $var

//运行脚本,没有任何输出结果: