变量,准确的说应该是 Shell 变量,就是计算机中用于记录一个值(不一定是数值,也可以是字符或字符串)的符号,而这些符号将用于不同的运算处理中。
变量的作用域即变量的有效范围(比如一个函数中、一个源文件中或者全局范围),在该范围内只能有一个同名变量。一旦离开则该变量无效,如同不存在这个变量一般。
在linux中,使用 declare 命令创建一个变量名为 temp 的变量:
declare temp
使用 = 号赋值运算符,将变量 tmp 赋值:
temp=123
使用 echo 命令和 $ 符号读取变量的值:
echo $temp
注意:并不是任何形式的变量名都是可用的,变量名只能是英文字母、数字或者下划线,且不能以数字作为开头。
环境变量的作用域比自定义变量的要大,如 Shell 的环境变量作用于自身和它的子进程。Shell 程序作为一个进程运行在操作系统之上,在 Shell 中运行的大部分命令都将以 Shell 的子进程的方式运行。

按变量的生存周期来划分,Linux 变量可分为两类:
永久的:需要修改配置文件,变量永久生效;
临时的:使用 export 命令行声明即可,变量在关闭 shell 时失效。
通过export命令可以将自定义变量导出为环境变量:
export TEMP
为了与普通变量区分,通常我们习惯将环境变量名设为大写:
echo $TEMP
可以使用 unset 命令删除一个环境变量:
unset TEMP
修改环境变量的命令:
| 变量设置方式 | 说明 |
|---|---|
| ${变量名#匹配字串} | 从头向后开始匹配,删除符合匹配字串的最短数据 |
| ${变量名##匹配字串} | 从头向后开始匹配,删除符合匹配字串的最长数据 |
| ${变量名%匹配字串} | 从尾向前开始匹配,删除符合匹配字串的最短数据 |
| ${变量名%%匹配字串} | 从尾向前开始匹配,删除符合匹配字串的最长数据 |
| ${变量名/旧的字串/新的字串} | 将符合旧字串的第一个字串替换为新的字串 |
| ${变量名//旧的字串/新的字串} | 将符合旧字串的全部字串替换为新的字串 |
修改PATH环境变量内容
mypath=$PATH
echo $mypath
# 删除PATH环境变量中的/home/shiyanlou/mybin字符串
mypath=${mypath%/home/shiyanlou/mybin}
# 或使用通配符 * 表示任意多个任意字符
mypath=${mypath%*/mybin}
1、创建一个 C 语言 hello world 程序:
gedit hello_world.c
2、输入如下内容,不能省略第一行:
#include <stdio.h>
int main(void)
{
printf("hello world!\n");
return 0;
}
3、保存后使用 gcc 生成可执行文件:
gcc -o hello_world hello_world.c
4、在 /home/shiyanlou 家目录创建一个 mybin 目录,并将上述 hello_world 文件移动到其中:
mkdir mybin
mv hello_world mybin/
5、在 mybin 目录中运行你刚刚创建的程序
cd mybin
./hello_world
输出为:
hello world!
回到上一级目录,也就是 shiyanlou 家目录,当再想运行那两个程序时,会发现提示命令找不到,除非加上命令的完整路径,但那样很不方便,如何做到像使用系统命令一样执行自己创建的脚本文件或者程序呢?那就要将命令所在路径添加到 PATH 环境变量了。
在每个用户的 home 目录中有一个 Shell 每次启动时会默认执行一个配置脚本,以初始化环境,包括添加一些用户自定义环境变量等等。这里使用的 Shell 是 zsh,它的配置文件是 .zshrc,相应的如果使用的 Shell 是 Bash,则配置文件为 .bashrc。它们在 etc 下还都有一个或多个全局的配置文件,不过我们一般只修改用户目录下的配置文件。Shell 的种类有很多,可以使用 cat /etc/shells 命令查看当前系统已安装的 Shell。
6、使用下面命令直接添加内容到 .zshrc 中:
echo "PATH=$PATH:/home/shiyanlou/mybin" >> .zshrc
上述命令中 >> 表示将标准输出以追加的方式重定向到一个文件中,注意前面用到的 > 是以覆盖的方式重定向到一个文件中,使用的时候一定要注意分辨。在指定文件不存在的情况下都会创建新的文件。
7、在 Shell 中修改了一个配置脚本文件之后(比如 zsh 的配置文件 home 目录下的 .zshrc),每次都要退出终端重新打开甚至重启主机之后其才能生效,可以使用 source 命令来让其立即生效:
source .zshrc
8、由于hello_world二进制文件在/home/hiyanlou/mybin目录下,而该目录存在于环境变量PATH中,故可以直接使用hello_world程序作为一个命令来输出结果,这样也就省去了通过具体的路径来执行程序的麻烦:
hello_world
等价于:
./mybin/hello_world
输出为:
hello world!