变量

跟许多程序设计语言一样,你可以在bash中创建变量。

Bash中没有数据类型。变量只能包含数字或者由一个或多个字符组成的字符串。你可以创建三种变量:局部变量,环境变量以及作为 位置参数 的变量。

局部变量

局部变量 是仅在某个脚本内部有效的变量。它们不能被其他的程序和脚本访问。

局部变量可以用=声明(作为一种约定,变量名、=、变量的值之间 不应该 有空格),其值可以用$访问到。举个例子:

  1. username="denysdovhan" # 声明变量
  2. echo $username # 输出变量的值
  3. unset username # 删除变量

我们可以用local关键字声明属于某个函数的局部变量。这样声明的变量会在函数结束时消失。

  1. local local_var="I'm a local value"

环境变量

环境变量 是对当前shell会话内所有的程序或脚本都可见的变量。创建它们跟创建局部变量类似,但使用的是export关键字。

  1. export GLOBAL_VAR="I'm a global variable"

bash中有 非常多 的环境变量。你会非常频繁地遇到它们,这里有一张速查表,记录了在实践中最常见的环境变量。

Variable Description
$HOME 当前用户的用户目录
$PATH 用分号分隔的目录列表,shell会到这些目录中查找命令
$PWD 当前工作目录
$RANDOM 0到32767之间的整数
$UID 数值类型,当前用户的用户ID
$PS1 主要系统输入提示符
$PS2 次要系统输入提示符

这里有一张更全面的Bash环境变量列表。

位置参数

位置参数 是在调用一个函数并传给它参数时创建的变量。下表列出了在函数中,位置参数变量和一些其它的特殊变量以及它们的意义。

Parameter Description
$0 脚本名称
$1 … $9 第1个到第9个参数列表
${10} … ${N} 第10个到N个参数列表
$* or $@ 除了$0外的所有位置参数
$# 不包括$0在内的位置参数的个数
$FUNCNAME 函数名称(仅在函数内部有值)

在下面的例子中,位置参数为:$0='./script.sh'$1='foo'$2='bar'

  1. ./script.sh foo bar

变量可以有 默认 值。我们可以用如下语法来指定默认值:

  1. # 如果变量为空,赋给他们默认值
  2. : ${VAR:='default'}
  3. : ${$1:='first'}
  4. # 或者
  5. FOO=${FOO:-'default'}