zoukankan      html  css  js  c++  java
  • 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的软链接, 所以也是等价的.

  • 相关阅读:
    HDU1166:敌兵布阵(树状数组)
    elasticsearch 7.4.0依赖
    IntelliJ IDEA手工安装插件方法
    Guava入门
    Maven添加Oracle驱动及依赖
    springboot整合netty(二)
    MyBatis-Plus
    「Chris Richardson 微服务系列」服务发现的可行方案以及实践案例
    spring initializr
    String.Format( )用法
  • 原文地址:https://www.cnblogs.com/zhuzi8849/p/7026972.html
Copyright © 2011-2022 走看看