PowerShell中的点(。)和&符(&)有什么区别?

ste*_*bot 5 powershell

在PowerShell中,调用cmdlet,函数,脚本文件或可操作程序时,使用点(.)和&符(&)有什么区别?

例如:

. foo.sh1
& foo.sh1
Run Code Online (Sandbox Code Playgroud)

有一个非常相似的问题已被错误地作为重复项关闭:调用PowerShell脚本块时,&符(&)和点(。)之间的差异。问题不同,并且关键字和搜索排名完全不同。在PowerShell管道中,“。”的简写是什么的答案只能回答一半的问题。

mkl*_*nt0 6

  • 之间差异.&运营商只有打电话时重要的脚本功能为- (或它们的别名)的cmdlet外部程序他们的行为是相同的。

  • 对于脚本和功能,.以及&针对不同来划定范围的定义的函数别名变量

    • &,即调用操作符,在范围内执行脚本和函数,这是典型的用例:通常希望函数和脚本在执行时没有副作用

      • 在调用的脚本/函数中定义的变量,(嵌套的)函数,别名对于调用而言是本地的,并且在脚本退出/函数返回时超出范围。

      • 但是请注意,即使在作用域中运行的脚本也会影响调用者的环境,例如通过使用Set-Location来更改当前位置,显式修改父作用域(Set-Variable -Scope 1 ...)或全局作用域($global:...)或定义进程级环境变量。

    • .中,点采购操作者,在执行脚本和函数的电流范围,并且通常用于修改呼叫方的范围通过添加函数,别名,和可能的的变量,供以后使用。例如,此机制用于加载$PROFILE初始化交互式会话的文件。

需要注意的是,对于函数(与脚本相反),子级 vs. 当前级的引用范围不一定是调用者的范围:如果函数是在模块中定义的,则引用范围是该模块的范围域

  • 换句话说:尝试.源自模块的函数一起使用实际上是没有意义的,因为要修改的作用域是模块的
  • 也就是说,模块中定义的功能通常并不是在设计时就考虑了点源。