1

我很喜歡函數如何大大減少Powershell腳本中的繁忙工作,並且爲我節省了大量冗餘編碼。但我現在有問題在Powershell字符串中調用一個聲明的函數(作爲使用'+'符號的串聯字符串的一部分),並且想知道是否有這樣的技巧。一些示例代碼:Powershell中的函數 - 可以在字符串中調用它們嗎?

#this function takes input and either returns the input as the value, or returns 
placeholder text as the value 

function val ($valinput) 
{ if ($valinput) 
    {return $valinput} 
    else 
    {$valinput = "No Results!"; return $valinput} 
} 

如果我致電該行的開頭或者函數本身:

val("yo!") 

運行良好。但是,如果我試圖來連接它作爲一個字符串的一部分,例如:

"The results of the tests are: " + val($results) 

PowerShell的似乎有執行功能有問題,我 得到「你必須提供在右手值表達式'+'操作符' '。'表達式中的意外標記'val'或 聲明。'錯誤。

有沒有辦法在連接字符串中正確調用函數?我知道我可以將函數的結果推送到另一個變量,並將結果變量作爲字符串的一部分進行連接,但每次我調用此函數時都會很麻煩。提前致謝...!

+0

想我可能已經偶然發現的老把戲: 「測試的結果是:」 + $(VAL($結果)) 似乎工作。我會留下任何證實這是做到這一點的方式。 – KTM

回答

6

裹可擴展字符串中的子表達式的命令/函數調用:

"The results of the test are: $(val "yo!")" 

另外值得指出的是,在PowerShell中的語法命令調用不需要括號。像你這樣的例子做總而言之,我會勸阻使用括號,因爲你會在連續的參數都被視爲一個情況下結束:

function val ($inputOne,$inputTwo) 
{ 
    "One: $inputOne" 
    "Two: $inputTwo" 
} 

現在,使用C#語法樣,你會怎麼做:

val("first","second") 

但發現輸出變爲:

One: first second 
Two: 

因爲PowerShell的解析器看到嵌套表達("first","second")並將其視爲一個參數。

的位置參數的論點正確的語法是:

val "first" "second" 
+1

關於Java中PowerShell函數和函數之間調用語法的區別的重要一點。我們很多人都用括號長大,我們發現自己不知不覺地回到他們身邊。 –

+0

使用Powershell和.net函數的組合並不能幫助知道什麼時候使用。這讓我絆倒了很多次,這已經不再有趣了。 *(也許我應該閱讀一本手冊)* –

+0

@WalterMitty如果您將PowerShell更多地視爲shell(比如bash,CMD,...))而不是編程語言。 –

相關問題