gpt4 book ai didi

PowerShell 变量冲突

转载 作者:行者123 更新时间:2023-12-03 14:19:54 24 4
gpt4 key购买 nike

我有一个对我的大多数应用程序都通用的变量,称为“电子邮件”。我还想在其中一个脚本中使用“电子邮件”作为参数的名称。我需要在同一个脚本中引用两个变量的值。理想情况下,会有一种使用模块/命名空间或其他东西来引用的方法,也许有,但我不知道。你可以看到我是如何解决这个问题的,但它很丑而且容易出错。有没有更好的办法?

# PowerShell v1
# Some variable names are very common.
param ($emails)

# My Hack
# We need to save current value so we have it after we source in variables below.
$emails0=$emails

# Below is going to load a variable called "emails" which will overwrite parm above.
. C:\load_a_bunch_of_global_variables.ps1

最佳答案

这是因为正如文档所说:(点源运算符)运行一个脚本,以便脚本中的项目是调用范围的一部分。

在这种情况下,我会将 C:\load_a_bunch_of_global_variables.ps1 转换为模块并将 $emails 作为参数传递或导出设置 $script 的函数:emails 模块中的变量。那么这个变量就不会和父脚本中的变量发生冲突了。

有关模块的更多信息,您可以使用 get-help about_modules


如果可能的话,我会避免在我的脚本中使用全局变量。

为什么?因为这是一种代码味道(正如程序员所说)。一个脚本没有问题。如果两个脚本使用相同的全局变量并且只读取,这可能是可以接受的。但是,如果其中任何一个更改了值,则可能会出现不愉快的冲突。

在某些情况下 Get-Variable -scope 1 -name myvariable 会有所帮助,但我只会在封闭的代码片段(如模块)或短脚本中使用它(与使用全局变量的原因相同)。

关于PowerShell 变量冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2331825/

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