PowerShell-如何用另一个变量调用变量?

时间:2019-09-07 15:57:54

标签: powershell indirection

我有此代码:

$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}

3 个答案:

答案 0 :(得分:3)

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

$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

答案 1 :(得分: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

答案 2 :(得分:0)

您可以使用Invoke-Expression。此命令评估一个字符串并将其作为命令运行。有关详细信息,请参见Microsoft文档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。对于此选项,您需要排除$签名并仅转发名称。我只选择了值,否则您将获得一个包含名称和值的表。

foreach (...)
{
    $var2="var_{0}" -f $name
    (Get-Variable -Name $variable).Value
}