Что такое $s
?Если это массив строк, то, поскольку вы говорите, что parseString
принимает строку, массив строк преобразуется в строку.С другой стороны, если $s
была единственной строкой, она будет работать (как показано ниже):
function parseString([string] $s)
{
$result = $s | Select-String -pattern "foo"
return $result
}
$s =@'
first line
second line with foo
third line
'@
parseString $s
Но если $s=@("first line","secondline with foo","third line")
, массив строк сначала преобразуется в строку (простоприсоединяясь к каждой строке) и, следовательно, вы потеряете перевод строки.Если у вас есть $s
, от Get-Content
и т. Д., Это будет иметь место.
Обратите внимание, что в большинстве случаев вам не нужно указывать типы в Powershell.Будь то при назначении переменных или в параметрах функции.
PS:
Если вы сделали
$ofs = "`n"
parseString $s
, вы получите ожидаемый результат в функции с [string]
.