全局 vs 脚本变量

Posted

技术标签:

【中文标题】全局 vs 脚本变量【英文标题】:Global vs script variable 【发布时间】:2022-01-21 15:23:18 【问题描述】:

我已经定义并分配了全局变量和脚本变量。但是当我调用全局变量时,它会被脚本变量覆盖

$global:myvar = 'global' 
$myvar = 'script'

$global:myvar #I expect here 'global', but it prints 'script'
$myvar

【问题讨论】:

这很奇怪。你在运行 PowerShell 7 吗? 您在同一范围内创建它们。请参阅 Get-Help About_Scope。 Powershell 5.1 版本 如果我将其定义为全球性,这有什么关系? @EricKlaus 如果您在***范围内(例如交互式提示),这很重要 【参考方案1】:

这就是 PowerShell 变量的设计方式。您的脚本或函数设置的变量只会在它们运行时持续存在,当它们结束时,它们的值就会消失。

在您今天所做的事情中,您正在更改 $global 范围变量,但并未运行脚本或函数。您实际上已经在全球范围内。

为了使用这些嵌套范围,您需要运行一个脚本或函数,如下面的这个脚本,称为scratch.ps1

#script inherited the previous value

"script: current favorite animal is $MyFavoriteAnimal, inherited"

#now setting a script level variable, which lasts till the script ends
$MyFavoriteAnimal = "fox"

"script: current favorite animal is $MyFavoriteAnimal"

function GetAnimal()
   #this function will inherit the variable value already set in the script scope
   "function: my favorite animal is currently $MyFavoriteAnimal"

   #now the function sets its own value for this variable, in the function scope
   $MyFavoriteAnimal = "dog"

   #the value remains changed until the function ends
   "function: my favorite animal is currently $MyFavoriteAnimal"


getAnimal

#the function will have ended, so now the script scope value is 'back'
"script: My favorite animal is now $MyFavoriteAnimal"

要访问此功能,您需要使用脚本或函数。

【讨论】:

以上是关于全局 vs 脚本变量的主要内容,如果未能解决你的问题,请参考以下文章

Golang✔️走进 Go 语言✔️ 第九课 局部变量 vs 全局变量

JS 中的全局变量 vs 本地存储 vs DOM 中的值,哪个更高效? [关闭]

VS C++警惕项目中文件全局变量冲突!!!!!!!!

VS C++警惕项目中文件全局变量冲突!!!!!!!!

我想请教一下,powershell的脚本之间如何传递全局变量。

全局变量和环境变量的区别