shell脚本中source和sh的区别

source script.sh 在当前环境下执行, 所有的变量即使脚本运行结束也会被保留下来(无需显示的声明),也可以使用当前bash中定义的变量.

在当前shell下定义一个变量

$var1='var1 defined in shell'

在脚本中输出上面定义的变量, 然后再定义一个新的变量

$ cat << EOF > script.sh
> echo \$var1
> var2="VAR var2 defined in the script.sh"
> EOF

$ echo $var1

var2='VAR var2 defined in the script.sh'

$source script.sh
var1 defined in shell

脚本执行完以后再输出var2, 可以看到var2已经定义, 并且输出.

$ echo $var2

$ VAR var2 defined in the script.sh

sh script.sh 是在一个子进程中运行, 任何分配的变量会在脚本运行结束时释放掉. 脚本中声明的变量脚本运行结束后就不复存在.

Note: ./script2.sh 也等同于这种方式.

# 首先在当前shell中定义一个变量
$ var="va1 is defined"

$ cat << EOF \> script2.sh
> if [ -z \${var+x} ];then
>     echo "var id not set"
> else
>     echo "var is set to $var";
> fi
> var2="var2 defined in script.sh"
> EOF

$ chmod +x script2.sh 

[centos@localhost ~]$ sh script2.sh 
var id not set

[centos@localhost ~]$ echo $var2

输出为空, 当前shell不能使用./script2.sh中定义的变量, 脚本中也不能使用shell中定义的变量.
Note: source script.sh与. scirpt.sh等价. sh 通常是bash的软链接, 所以也是等价的.

转载于:https://www.cnblogs.com/zhuzi8849/p/7026972.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值