2015-05-26 23 views
1

有沒有更好的方式來寫:終止數組變量

for($j =0; $j -lt 11; $j++){ 
    if($averagetime[$j] -ne "no data"){ 
     Write-host $type[$j] "(" $1st[$j] "):" $averagetime[$j] 
    } 
} 

我outptut看起來是這樣的:Multiaxial_Milling (5): 3.46

我想它想的輸出是這樣的:Multiaxial_Milling (5): 3.46

我知道${variable}的作品,但它不適用於陣列。目前這對我來說只是一個整容問題,但我想這可能是未來的一個問題。

回答

5

你可以把數組索引的字符串中有sub-expression $(...)

Write-host $type[$j] "($($1st[$j])):" $averagetime[$j] 

的PowerShell將評估內部$(...)的東西,作爲一個正常的表達,然後通過這個表達式返回的值替換$(...)。下面是一個演示:

PS > "$(1 + 1)" 
2 
PS > "a$(1 + 1)b" 
a2b 
PS > 

然而要注意子表達式只與雙引號字符串文字"..."工作。如果你把它們放在一個單引號內'...',它們將被視爲普通文本。

+0

謝謝,我只是不知道語法! –

4

format operator在這種情況下也是一個不錯的選擇,特別是如果你輸出格式化變得特別複雜。

一些基本數組的簡單例子。

$evens = 2,4,6,8 
$odds = 1,3,5,7 

for($j =0; $j -lt 4; $j++){ 
    Write-Host ("Index {0}: Even - {1} | Odd - {2}" -f $j,$evens[$j],$odds[$j]) 
} 

將淨以下輸出

Index 0: Even - 2 | Odd - 1 
Index 1: Even - 4 | Odd - 3 
Index 2: Even - 6 | Odd - 5 
Index 3: Even - 8 | Odd - 7 

注:我們需要在這裏使用括號,因爲否則-f會都被接走了作爲一個參數Write-Host。如果您只是將其發送到標準輸出,則可以省略Write-Host和括號。

+0

這是一個非常有用的技巧!謝謝,我會記住這一點。 –