自分向けの忘備です。
Powershell の関数定義で気を付けること
関数定義を Javascript みたいに書きたくなる。
function foo( $a, $b ) {
return $a + $b
}
Write-Host foo( "AAA", "BBB" )
=> foo AAA BBB
AAABBB を期待していたのだけれど、それとは異なる結果である。
さては関数定義が悪いのだろう、デバッグのヒントとなるよう、コロンを埋め込んでみる。
function foo( $a, $b ) {
return "{0}:{1}" -f $a, $b
}
Write-Host foo( "AAA", "BBB" )
=> foo AAA BBB
前と同じ結果だし、コロンすら表示されないってどういうこと?
実は、定義側ではなく、呼び出し側に問題がある。
試しに、上記の呼び出し方を分解しててみると
function foo( $a, $b ) {
return "{0}:{1}" -f $a, $b
}
Write-Host foo
Write-Host ( "AAA", "BBB" )
=> foo
=> AAA BBB
関数 foo を評価せぬまま終了していることがわかる。
正解は、これ。
function foo( $a, $b ) {
return "{0}:{1}" -f $a, $b
}
Write-Host (foo "AAA" "BBB")
関数名と引数をスペース区切りで並列に書く。その全体を括弧で囲う。
括弧は式評価の意味なのでさしたる特別感はないけれど、引数はスペース区切りなのね...