Skip to content

自定义变量的引用与作用范围

变量引用

变量的引用方式为${变量名},前面变量赋值举的例子其实就已经大量使用变量的引用了。想查看变量值的话,使用 echo ${变量名}进行查看:

bash
#!/bin/bash

hello="Hello world!"
echo ${hello}

变量引用 ${变量名}在部分情况下可以省略为 $变量名

bash
#!/bin/bash

hello="Hello world!"
echo $hello

个人推荐是直接使用 ${变量名}这种方式即可,这样能省去很多麻烦,例如我们想将 hello这个变量与 123进行拼接,这种情况使用缩写就会有问题:

bash
#!/bin/bash

hello="Hello world!"

# 这里会认为是引用 hello123 这个变量,实际上我们期望的效果是输出 Hello world!123
echo $hello123

如果使用 ${变量名}就不会存在这种问题:

bash
#!/bin/bash

hello="Hello world!"
echo ${hello}123

变量作用范围

变量的作用范围分为全局以及局部。全局环境变量它作用的范围就是当前 Shell 对话以及所有的子 Shell。而用户自定义局部变量以及局部环境变量则仅针对当前 Shell,父 Shell 以及子 Shell 都无法读取。

如果想要子进程能够读取到父进程定义的变量,则可以在父进程中使用 export导出变量。通过 export导出的变量,对所有的子 Shell 都是可见的。终端执行下面的命令可以进行验证 export对变量作用范围的影响:

shell
hello="Hello world!"

bash
echo $hello # 输出为空
exit

export hello
echo $hello # 输出 "Hello world!"
exit

需要注意的是,子 Shell 对变量的操作不会影响父 Shell,如 unset 全局变量。

使用 export的时候,可以将设置变量和导出变量放在一个命令里完成:

shell
export hello="Hello world!"