Команда $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)
становится полезным. Если вам нужно использовать значение, которое вы только что вернулся в другую команду, например, если значение было внутрибрюшинно, что вы пытаетесь пинг, вы могли бы сделать что-то вроде этого:
Test-Connection $(Get-Variable -Name $eth_netmask -ValueOnly)
Что вы пытаетесь достичь ? – mjolinor