Вызов Echo внутри функции предварительно ожидает строку эха, чтобы вернуть значение в Powershell - PullRequest
13 голосов
/ 29 января 2010

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

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

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

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

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

1 Ответ

22 голосов
/ 29 января 2010

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

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

Это обычно выдает что-то вроде 0 (индекс, в который было добавлено "hi"), но поскольку мы перенаправили на $ 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' }.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...