2017-08-22 50 views
0

如何在數組的字符串元素中添加變量數據?如果我做$s.Length,輸出爲1,而不是2在PowerShell數組元素中使用變量

$IPAddress = '192.168.1.1' 
[string[]]$s = (
    'https://google.com/' + $IPAddress + '/hostname', 
    'https://google.com/' + $IPAddress + '/DNS' 
) 
foreach ($element in $s) { 
    Write-Host $element 
} 

回答

1

完成你正在嘗試(字符串擴張)最簡單的方法是:

$s = "https://google.com/$IPAddress/hostname", 
     "https://google.com/$IPAddress/DNS" 

通過使用雙引號會自動擴大$IPAddress內的字符串。當變量是一個字符串時,此功能效果最佳,因爲更復雜的對象可能無法按預期執行。如果需要以這種方式引用對象的屬性,則需要將其包裝在$()中,例如"Hello $($User.Name)!"以展開$User對象的Name屬性。

+0

謝謝,這非常有幫助! – spunkyquagga

1

TheMadTechnician打我給它幾秒鐘,但如果你喜歡明確構建字符串表達式,包起來的括號:

$IPAddress = '192.168.1.1' 
[string[]]$s = (
     ('https://google.com/'+$IPAddress+'/hostname'), 
     ('https://google.com/'+$IPAddress+'/DNS')) 
foreach ($element in $s) 
{ 
Write-Host $element 
} 

的括號內強制表達式先計算。

2

$s由於您定義數組的方式而包含單個字符串。級聯運算符(+)比陣列構建運算符(,)有更弱的precedence。正因爲如此的聲明

'foo' + $v + 'bar', 'foo' + $v + 'baz' 

實際上是這樣的:

'foo' + $v + @('bar', 'foo') + $v + 'baz' 

由於字符串連接操作該陣列被錯位到空間分隔的字符串(隔板在automatic variable$OFS定義) ,導致如下結果:

'foo' + $v + 'bar foo' + $v + 'baz' 

要避免此行爲,您需要將拼接操作放在分組表達式中sions:

$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[]]是可選的。即使沒有明確的轉換,使用逗號運算符也會給你一個數組。

相關問題