Skip to content

变量声明、赋值与取消

变量分类:

  • 全局变量
    • 全局环境变量
    • 全局自定义变量
  • 局部变量
    • 局部环境变量
    • 局部自定义变量

按照惯例,使用小写定义自定义变量,使用大写来定义环境变量。局部变量仅针对当前 Shell,也就是说父 Shell 以及子 Shell 都无法读取当前 Shell 的自定义局部变量。而全局变量,它对整个 Shell 对话以及所有的子 Shell 都是生效的。

虽然不同的变量的作用范围不同,但是它们的声明、赋值以及取消的方式都是相同的。

变量声明

变量名的命名规则遵循以下规则:

  • 变量名由字母、数字、下划线组成
  • 变量名不能以数字开头

变量赋值

通过 =将变量值赋值给变量,需要注意的是 =两边是没有空格的:

bash
#!/bin/bash

foo=Hello
bar=1

引号

如果变量值有特殊字符的话(如空格),需要使用 "或者 '将变量值包裹起来:

bash
#!/bin/bash

foo="Hello world"

# 等价于
foo='Hello world'

上面的例子看似 "'相同,但是实际上还是有区别的。在 "中,特殊字符(如$)能保持原来的特性。但是在 '中,特殊字符则仅作为一般字符:

bash
#!/bin/bash

hello="Hello world!"

foo="${hello}"
echo ${foo} # 输出为: Hello world!

bar='${hello}'
echo ${bar} # 输出为:${hello}

赋值命令

命令也可以赋值给变量:

bash
#!/bin/bash

foo=ls

${foo} # 等同于执行 ls

赋值命令输出

想将命令输出赋值给变量的话,可以使用 $()或者 ````:

bash
#!/bin/bash

foo=$(ls)
echo ${foo}

# 等价于
foo=`ls`
ehco ${foo}

取消变量

取消变量使用 unset

bash
#!/bin/bash

hello="Hello world!"
echo ${hello} # 输出:Hello world!

unset hello
echo ${hello} # 输出空白