Вызов Echo внутри функции pre-pends echo string для возврата значения в Powershell

Эй, ребята, я Powershell noob и, похоже, все время попадаюсь на маленькие странные поведения. Вот несколько тестовых кодов:

 function EchoReturnTest(){
     echo "afdsfadsf"
     return "blah"
 }

 $variable = EchoReturnTest
 echo ("var: " + $variable)

Запуск этого script генерирует это как вывод: "var: afdsfadsf blah"

Почему функция не просто возвращает строку "бла"?

Ответы

Ответ 1

Во-первых, функции PowerShell возвращают весь незагруженный "вывод". Вы можете захватывать вывод, назначая переменной, и вы можете игнорировать вывод путем перенаправления на $null например:

$arrayList.Add("hi") > $null

Это обычно выводит что-то вроде 0 (индекс, где добавлен "привет" ), но поскольку мы перенаправляемся на $null, вывод игнорируется.

Во-вторых, echo - это просто псевдоним для "Write-Output", который записывает соответствующий объект в выходной поток. return "blah" - это просто удобство, которое эквивалентно:

Write-Output "blah"
return

Итак, ваша реализация функции эквивалентна этому:

function EchoReturnTest(){  
    Write-Output "afdsfadsf"  
    Write-Output "blah"
    return
}  

Если вы хотите "увидеть" некоторую информацию на консоли хоста, не считая частью "вывода" функции, используйте "Write-Host", например:

function EchoReturnTest(){  
    Write-Host "afdsfadsf"  
    return "blah"
}

Кроме того, если у вас нет параметров, вам не нужны парсеры в конце имени функции, например. function EchoReturnTest { return 'blah' }.