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

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

    • 摘要
    • 场景一.直接执行shell(/../../test.sh)
    • 场景二. 用 source /../../test.shell 的方式执行shell

摘要

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 会话中。

你可能感兴趣的:(chrome,前端)