我有以下变量:
[string]$eth_netmask = "ext_netmask"
[string]$ext_netmask = "255.255.252.0"
$($eth_netmask)
正在返回ext_netmask
。我期待255.255.252.0
我做错了什么? 感谢您的帮助!
答案 0 :(得分:5)
命令$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
这是$(something)
语法变得有用的点。如果您需要使用刚刚在另一个命令中返回的值,例如,如果该值是您尝试ping的ip,则可能会执行以下操作:
Test-Connection $(Get-Variable -Name $eth_netmask -ValueOnly)