Linux环境变量

目录:

  • 环境变量
  • 创建局部变量
  • 删除环境变量
  • 默认shell环境变量
  • 设置PATH环境变量
  • 定位环境文件
  • 数组变量

环境变量

环境变量:存储有关shell会话和工作环境的信息,便于程序或脚本能访问。

全局变量

全局变量对于shell会话和所有子shell都可见,即在子shell中也可以引用。

env 打印全部全局变量
printenv 打印全部全局变量
printenv HOME 显示某个环境变量
echo $HOME 加上$符号,显示某个环境变量,如果要用到变量加上$;如果要操作变量不加$。
ls $HOME 如果echo $HOME显示/home/work,则ls $HOME等价于ls /home/work
局部变量

局部变量只对创建它们的shell可见。

set 打印全局变量、局部变量、用户定义变量

设置环境变量

设置局部变量

启动bash shell之后,通过等号进行赋值。用户定义变量无法在子shell中引用,同样的子进程创建的局部变量也无法在父进程中使用,退出子进程之后局部变量不可用。

echo $my_env
my_env=helloworld
echo $my_env
my_env="hello world"
echo $my_env
设置全局变量

如果想要在子进程可用,要创建全局变量,方法:创建一个局部变量,然后导出到全局环境。

my_env=hello
export my_env export命令将局部变量导出到全局环境,成为全局变量,不要加$
bash 进入子shell
echo $my_env 打印hello
exit 退出子shell 
echo $my_env 仍然打印hello
bash 进入子shell
echo $my_env 打印hello
my_env=world 在子shell中修改全局变量,仅在子shell中有效,
export my_env 无论是否执行export导出,都不会影响父shell中的全局变量
echo $my_env 打印world
exit 退出子shell
echo $my_env 仍然打印hello,修改子shell中全局变量不会影响到父shell中该变量的值

删除环境变量

echo $my_env
unset my_env 使用unset删除环境变量,不加$
echo $my_env

my_env=hello 
export my_env 全局变量my_env值为hello
bash 进入子shell
echo $my_env 子shell中打印hello
unset my_env 子shell中删除my_env
echo $my_env 子shell中打印空
exit 退出子shell
echo $my_env 父shell中仍然打印hello,即子shell中删除全局变量对父shell无效

默认shell环境变量

列表参见:https://blog.csdn.net/henni_719/article/details/53378681

设置PATH环境变量

PATH定义了用于进行命令和程序查找的目录,用冒号分隔。
如果命令/程序的位置不在PATH中,shell无法找到,只能使用绝对路径。解决办法:引用原PATH值,将新目录添加到PATH中

echo $PATH
PATH=$PATH:/home/work/scripts 
echo $PATH 打印的PATH值会包含/home/work/scripts,但只在当前有效,一旦退出系统,修改失效

定位系统环境变量——启动文件

bash shell有三种启动方式:登录时的登录shell,非登录时的交互式shell,运行脚本的非交互式shell。每种方式都会在相应的启动文件中查找命令。

登录shell

用户登录Linux系统时,bash shell作为登录shell启动,并从5个启动文件读取命令:

  • /etc/profile,系统默认的主启动文件,每个用户登录时都会执行,会迭代/etc/profile.d中的文件。/etc/profile.d目录可以放置特定应用程序的启动文件。也建议用户把新的或修改的全局变量放在profile.d下的.sh文件中。
  • $HOME/.bash_profile,HOME目录下的启动文件供用户编辑,在每次启动shell会话时生效
  • $HOME/.bashrc
  • $HOME/.bash_login
  • $HOME/.profile
交互式shell

交互式shell只检查HOME目录下的.bashrc文件,不访问/etc/profile。

非交互式shell

尝试读取BASH_ENV定义的启动文件。如果没有设置BASH_ENV,子shell还可以继承使用父shell导出过的变量,即全局变量。子shell不能使用父shell设置但未导出的变量。

数组变量(使用不频繁)

如果某个环境变量存储了多个值,该变量就是一个数组变量。括号+空格。

mytest=(one two three four)
echo $mytest 只会显示one,即数组的第一个值
echo ${mytest[2]} 打印出three
echo ${mytest[*]} 使用通配符,打印出one two three four
mytest[2]=six 单独修改索引位置2的值
echo ${mytest[*]} 打印出one two six four
unset mytest 删除整个数组
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值