Linux Shell
在使用操作系统的时候,会了解到系统中的set命令的主要作用或者说是大部分作用就是显示系统中已经存在的shell变量,以及设置shell变量的新变量值。使用set更改shell特性时,符号+和-的作用分别是关闭和打开指定的模式。set命令不能够定义新的shell变量,如果要定义新的变量,可以使用declare命令以变量名=值的格式进行定义即可。
命令选项
| 选项 | 含义解释 |
|---|---|
| -a | 标示已修改的变量,以供输出至环境变量 |
| -b | 使被中止的后台程序立刻回报执行状态 |
| -C | 转向所产生的文件无法覆盖已存在的文件 |
| -d | Shell预设会用杂凑表记忆使用过的指令,以加速指令的执行。使用-d 参数可取消 |
| -e | 若指令传回值不等于0,则立即退出shell |
| -f | 取消使用通配符 |
| -h | 自动记录函数的所在位置 |
| -H Shell | 可利用!加<指令编号>的方式来执行history中记录的指令 |
| -k | 指令所给的参数都会被视为此指令的环境变量 |
| -l | 记录for循环的变量名称 |
| -m | 使用监视模式 |
| -n | 只读取指令,而不实际执行 |
| -p | 启动优先顺序模式 |
| -P | 启动-P参数后,执行指令时,会以实际的文件或目录来取代符号连接 |
| -t | 执行完随后的指令,即退出shell |
| -u | 当执行时使用到未定义过的变量,则显示错误信息 |
| -v | 显示shell所读取的输入值 |
| -x | 执行指令后,会先显示该指令及所下的参数 |
定义变量
使用declare命令定义一个新的环境变量tools。
# 定义新环境变量$ declare tools='VScode'
再使用set命令将新定义的变量输出为环境变量。
# 设置为环境变量$ set -a tools
执行该命令后,将会新添加对应的环境变量。用户可以使用env命令和grep命令分别显示和搜索环境变量tools。
# 显示环境变量值$ env | grep tools
使用 set/env/export 的区别
| 选项 | 含义解释 |
|---|---|
| set | 显示/设置shell变量,包括的用户变量以及私有变量;不同类的shell有不同的私有变量,bash/ksh/csh每中shell私有变量都不一样 |
| env | 显示/设置用户变量 |
| export | 显示/设置当前导出成用户变量的shell变量 |
[escape@localhost ~]$ name="EscapeWen"[escape@localhost ~]$ echo $nameEscapeWen# 设置完当前用户变量并没有对应的值[escape@localhost ~]$ env | grep name# 设置完成后shell变量有对应的值[escape@localhost ~]$ set | grep nameEscapeWen# 对应的值,使用export也没导出[escape@localhost ~]$ export| grep name# 使用expor导出一下,在用户变量就可以找到了[escape@localhost ~]$ export aaa[escape@localhost ~]$ env | grep aaaEscapeWen
使用注意事项
使用unset命令来清除环境变量
注意set、env、export设置的变量,都可以用unset来清除的。
# 删除环境变量TEST[escape@localhost ~]$ export TEST="Test"[escape@localhost ~]$ unset $TEST
使用readonly命令,设置只读变量
# 将环境变量TEST设为只读[escape@localhost ~]$ export TEST="Test"[escape@localhost ~]$ readonly TEST
