gpt4 book ai didi

powershell - PowerShell 中的点 (.) 和与号 (&) 有什么区别?

转载 作者:行者123 更新时间:2023-12-04 17:42:57 24 4
gpt4 key购买 nike

在 PowerShell 中,调用 cmdlet、函数、脚本文件或可运行程序时,使用点 (.) 和与号 (&) 有什么区别?

例如:

. foo.sh1
& foo.sh1

有一个非常相似的问题被错误地关闭为重复: Differences between ampersand (&) and dot (.) while invoking a PowerShell scriptblock .问题是不同的,并且具有完全不同的关键字和搜索排名。 What is the `.` shorthand for in a PowerShell pipeline?上的答案只回答了一半的问题。

最佳答案

  • . 之间的区别和 &运算符仅在调用 PowerShell 脚本或函数时很重要 (或它们的别名) - 对于 cmdlet 和外部程序,它们的行为相同。
  • 对于脚本和函数, .&在函数、别名和变量的定义范围方面有所不同 :
  • & , the call operator , 在子范围内执行脚本和函数,即 典型用例 : 函数和脚本通常应为 执行无副作用 :
  • 在调用的脚本/函数中定义的变量、(嵌套)函数、别名对于调用来说是本地的,并且在脚本退出/函数返回时超出范围。
  • 但是请注意,甚至在子作用域中运行的脚本也会影响调用者的环境 ,例如使用 Set-Location要更改当前位置,显式修改父范围 (Set-Variable -Scope 1 ...) 或全局范围 ($global:...) 或定义进程级环境变量。

  • . , the dot-sourcing operator , 在当前范围内执行脚本和函数,是 通常用于通过添加函数、别名和可能的变量来修改调用者的范围以供以后使用 .例如,此机制用于加载 $PROFILE初始化交互式 session 的文件。


  • 需要注意的是,对于函数(相对于脚本),child 与 current 的引用范围不一定是调用者的范围:如果函数是在模块中定义的,则引用范围是该模块的范围域:
  • 换句话说:尝试使用 .使用模块发起的函数实际上是没有意义的,因为被修改的范围是模块的。
  • 也就是说,模块中定义的函数通常不会在设计时考虑到点源。
  • 关于powershell - PowerShell 中的点 (.) 和与号 (&) 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54661916/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com