在Powershell中评估变量中的变量

use*_*424 1 variables powershell

我有以下变量:

[string]$eth_netmask = "ext_netmask"
[string]$ext_netmask = "255.255.252.0"
Run Code Online (Sandbox Code Playgroud)

$($eth_netmask)正在恢复ext_netmask.我期待255.255.252.0

我究竟做错了什么?
我在这里先向您的帮助表示感谢!

小智 6

该命令$eth_netmask返回名为eth_netmask的变量的值.该表达式$(something)与变量无关,而是在评估语句的其余部分之前评估括号的内容.这意味着该语句$($eth_netmask)将分两步进行评估:1:$($eth_netmask)评估命令"ext_netmask" 2:"ext_netmask"评估为具有打印ext_netmask输出结果的命令.

这种格式是不必要的,因为变量通常在命令的其余部分之前解析.如果有其他选择,我的建议是避免需要这样做.将这种环形交叉引用到一段代码中只会导致问题.但是,如果由于某种原因无法避免,则可以引用其名称存储在另一个变量中的变量.

[string]$eth_netmask = "ext_netmask"
[string]$ext_netmask = "255.255.252.0"

Get-Variable -Name $eth_netmask -ValueOnly
Run Code Online (Sandbox Code Playgroud)

这是$(something)语法变得有用的点.如果您需要使用刚刚在另一个命令中返回的值,例如,如果值是您尝试ping的ip,则可能会执行以下操作:

Test-Connection $(Get-Variable -Name $eth_netmask -ValueOnly)
Run Code Online (Sandbox Code Playgroud)