shell脚本中环境变量(全局变量)、普通变量(局部变量)

本文介绍了shell脚本中环境变量(全局变量)和普通变量(局部变量)的区别。通过示例说明了环境变量的设置与清除,并探讨了为何在脚本中设置环境变量后,执行可执行文件可能会遇到错误。问题的关键在于直接执行脚本是在子shell中运行,而`source`命令则在当前shell环境中运行。环境变量只有通过`export`定义才对子shell有效,且在子shell结束后消失,未`export`的变量仅限于当前shell。文章还简单提及了UNIX系统中运行shell程序时的环境变量行为。
摘要由CSDN通过智能技术生成

shell脚本中环境变量(全局变量)、普通变量(局部变量)

定义环境变量#export name=lucy
定义普通变量#name=lucy
可以使用echo对变量进行显示。#echo $name
利用env,显示所有的环境变量。#env
清除变量unset。#unset name

在shell脚本设置了环境变量,如export LIBRARY_PATH=./lib/,执行了此脚本后, 在执行生成的可执行文件,提示错误
error while loading shared libraries: libww.so: cannot open shared object file: No such file or directory
但是如果把export那句话单独在命令行运行,在gcc编译代码后不会出现问题
怎么也想不通,为什么脚本执行了,设置了环境变量,但是运行可执行文件总是失败。
查看大牛博客,终于发现

原因是执行脚本用./test.sh的方式,如果采用source test.sh,则环境变量会生效。

./XXX.sh的时候,脚本里面打印PATH是改了,但是在终端echo $PATH却没有看到变化,因为这样执行等于说不在当前进程

那么。这是为什么呢?

关键:直接执行一个脚本文件是在一个子shell中运行的,而source则是在当前shell环境中运行的。

1、执行脚本时是在一个子shell环境运行的,脚本执行完后该子shell自动退出
2、一个shell中的系统环境变量才会被复制到子shell中(用export定义的变量)
3、一个sh

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值