PowerShell - 如何用另一个变量调用一个变量? [复制]

Posted

技术标签:

【中文标题】PowerShell - 如何用另一个变量调用一个变量? [复制]【英文标题】:PowerShell - How do I call a variable with another variable? [duplicate] 【发布时间】:2020-01-10 02:49:46 【问题描述】:

我有这个代码:

$var_Cart="text cart"
$var_Cat="text cat"
$var_Home="text home"

$names = "Cart","Cat","Home"
foreach ($name in $names)

    $variable="var_$name"
    Write-Host "`n`-----Print "$variable"-----"

如何打印“文本购物车、文本猫和文本主页”?

注意:在 BASH 中解析如下:$!var

【问题讨论】:

Get-Variable. 虽然Get-Variable 可以,但最好使用哈希表或 PSCustomObject 【参考方案1】:

考虑(可能)更好的替代方案:

$Hash=@Cart="text cart";Cat="text cat";Home="text home"
$var = [PSCustomObject]$hash

$hash

$var

$names = "Cart","Cat","Home"
foreach ($name in $names)
    "`$hash['0']=1" -f $name,$hash[$name]
    "`$var.0=1" -f $name,$var.$name


样本输出:

Name                           Value
----                           -----
Cart                           text cart
Cat                            text cat
Home                           text home

Cart      Cat      Home
----      ---      ----
text cart text cat text home    

$hash['Cart']=text cart
$var.Cart=text cart
$hash['Cat']=text cat
$var.Cat=text cat
$hash['Home']=text home
$var.Home=text home

使用这种方法,您也无需事先知道名称, 你可以迭代它们:

$hash.Keys

$var.PSObject.Properties.Name

【讨论】:

【参考方案2】:

使用get-variable的value属性:

$var_Cart = 'text cart'
$var_Cat = 'text cat'
$var_Home = 'text home'

$names = 'Cart','Cat','Home'
foreach ($name in $names)

  (get-variable var_$name).value

输出

text cart
text cat
text home

【讨论】:

很好,不过如果您只对变量的值感兴趣,使用-ValueOnly 开关会更简单、更高效:Get-Variable -ValueOnly var_$name 非常感谢@js2010,我解决了【参考方案3】:

您可以使用Invoke-Expression。此命令评估字符串并将其作为命令运行。有关详细信息,请参阅 Microsoft Docs Invoke-Expression。

$var_Cart="text cart"
$var_Cat="text cat"
$var_Home="text home"

$names = "Cart","Cat","Home"
foreach ($name in $names)

    $variable="`$var_0" -f $name
    Write-Host "`n-----Print $variable-----"
    Invoke-Expression -Command $variable

否则,正如 Bacon_Bits 建议的那样,您可以使用 Get-Variable。对于此选项,您需要排除 $-sign 并仅转发名称。我只选择了值,否则你会得到一个包含名称和值的表格。

foreach (...)

    $var2="var_0" -f $name
    (Get-Variable -Name $variable).Value

【讨论】:

Invoke-Expression should generally be avoided

以上是关于PowerShell - 如何用另一个变量调用一个变量? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何用简单的英语解释回调?它们与从另一个函数调用一个函数有何不同?

如何调用自己写的python函数

如何将变量从一个PowerShell脚本加载到另一个?

Python / Django / Jinja2:如何用另一个变量的值扩展变量名(例如在 for 循环中)?

在 PowerShell 中调用动态变量

C语言中如何用一个程序调用另一个程序,两个程序都是.c文件。