PowerShell - 如何用另一个变量调用一个变量?
PowerShell - How do I call a variable with another variable?
我有这个代码:
$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"-----"
}
我怎样才能打印 "text cart, text cat and text home"?
注意:在 BASH 中这样解析:${!var}
您可以使用 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
。对于此选项,您需要排除 $
符号并仅转发名称。我只选择了值,否则你会得到一个带有名称和值的 table。
foreach (...)
{
$var2="var_{0}" -f $name
(Get-Variable -Name $variable).Value
}
考虑(可能)更好的选择:
$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
使用 get-variable 的值 属性:
$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
我有这个代码:
$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"-----"
}
我怎样才能打印 "text cart, text cat and text home"?
注意:在 BASH 中这样解析:${!var}
您可以使用 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
。对于此选项,您需要排除 $
符号并仅转发名称。我只选择了值,否则你会得到一个带有名称和值的 table。
foreach (...)
{
$var2="var_{0}" -f $name
(Get-Variable -Name $variable).Value
}
考虑(可能)更好的选择:
$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
使用 get-variable 的值 属性:
$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