如何在数组的字符串元素中添加变量数据?如果我$s.Length
,则输出为1而不是2。
$IPAddress = '192.168.1.1'
[string[]]$s = (
'https://google.com/' + $IPAddress + '/hostname',
'https://google.com/' + $IPAddress + '/DNS'
)
foreach ($element in $s) {
Write-Host $element
}
答案 0 :(得分:2)
$s
包含单个字符串。连接运算符(+
)比数组构造运算符(,
)弱precedence。因为那个声明
'foo' + $v + 'bar', 'foo' + $v + 'baz'
实际上是这样的:
'foo' + $v + @('bar', 'foo') + $v + 'baz'
由于字符串连接操作,数组被分成一个以空格分隔的字符串(分隔符在automatic variable $OFS
中定义),结果如下:
'foo' + $v + 'bar foo' + $v + 'baz'
要避免此行为,您需要将连接操作放在分组表达式中:
$s = ('https://google.com/' + $IPAddress + '/hostname'),
('https://google.com/' + $IPAddress + '/DNS')
或内联变量(需要双引号字符串):
$s = "https://google.com/${IPAddress}/hostname",
"https://google.com/${IPAddress}/DNS"
您也可以使用format operator,但这也需要对表达式进行分组:
$s = ('https://google.com/{0}/hostname' -f $IPAddress),
('https://google.com/{0}/DNS' -f $IPAddress)
旁注:将变量投射到[string[]]
是可选的。即使没有显式强制转换,使用逗号运算符也会为您提供数组。
答案 1 :(得分:1)
完成您尝试的最简单的方法(字符串扩展)是:
$s = "https://google.com/$IPAddress/hostname",
"https://google.com/$IPAddress/DNS"
通过使用双引号,它将自动展开字符串中的$IPAddress
。当变量是字符串时,这最有效,因为更复杂的对象可能无法按预期执行。如果需要以这种方式引用对象的属性,则需要将其包含在$()
中,例如"Hello $($User.Name)!"
以展开Name
对象的$User
属性
答案 2 :(得分:1)
TheMadTechnician几秒钟就把它打败了,但如果你更喜欢明确地构造字符串表达式,请将它们包装在parens中:
$IPAddress = '192.168.1.1'
[string[]]$s = (
('https://google.com/'+$IPAddress+'/hostname'),
('https://google.com/'+$IPAddress+'/DNS'))
foreach ($element in $s)
{
Write-Host $element
}
parens强制首先评估内部表达式。