【问题标题】:PowerShell - How do I call a variable with another variable? [duplicate]PowerShell - 如何用另一个变量调用一个变量? [复制]
【发布时间】: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

标签: powershell indirection


【解决方案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
    }
    
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-08
    • 2020-10-09
    • 2017-12-22
    • 2013-11-04
    相关资源
    最近更新 更多