【shell-09】环境变量作用域

发布时间:2024年01月22日

你真是理解 ./test 和source ./test 的区别吗?你理解export吗

摘要

export 命令用于将 shell 变量输出为环境变量,或者将 shell 函数输出为环境变量。以下是 export 命令的参数及其详解和举例:

  1. -f:指向函数。这个参数用于将一个 shell 函数输出为环境变量。当使用这个参数时,函数会被导出为环境变量,使得它可以被子进程调用。

    function my_function() {  
        echo "Hello, World!"  
    }  
    export -f my_function
    
    上述代码将 my_function 函数导出为环境变量,使其可以在其他 shell 脚本或子进程中被调用。
    
    
  2. -n :删除变量的导出属性。这个参数用于删除一个环境变量的导出属性,使得它不再被子shell进程继承。

    举例:

    bash
    	export MY_VARIABLE="Hello, World!"  
    	export -n MY_VARIABLE
    	上述代码将删除 MY_VARIABLE 环境变量的导出属性,使其不再被子shell进程继承。
    
  3. -p: 这个参数用于显示当前 shell 中所有export 的环境变量书香

    export -p
    请观察运行结果
    
  4. -pf:罗列出全部拥有导出属性的函数。

    举例:

    export -pf
    

场景一.直接执行shell(/…/…/test.sh)

  1. export 的参数只能从父->子 shell传递

  2. 在场景一情景下, 子shell要想获取到父shell的变量必须在 父shell中执行export向下传递

  3. 直接执行脚本会返回脚本的退出状态

  4. 那么脚本中的命令会出现在历史记录中(除非脚本内部有逻辑来防止这一点)

  5. 如果脚本中的命令失败了,它通常会继续执行直到脚本结束,除非脚本内部有逻辑来处理错误。

场景二. 用 source /…/…/test.shell 的方式执行shell

  1. source 执行的时候你可以理解为将所有引用的代码铺平展开执行,这样其实不管是引入了多少个文件,它们都在一个进程中。 因此也就无所谓export或者不export了,因为都在同一个shell会话中

  2. source 命令不会返回任何退出状态,因为它实际上并没有退出。脚本的退出状态会返回给当前的 shell

  3. 如果脚本使用 source 执行,那么脚本中的命令不会出现在执行脚本的 shell 的历史记录中

  4. 使用 source 时,如果脚本中的命令失败了,它会立即返回并显示错误。

  5. 这意味着脚本中定义的所有环境变量和修改都会保留在当前 shell 会话中。

文章来源:https://blog.csdn.net/qq_36066039/article/details/135756475
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。