Почему подвыражение $(Write-Host) выводится в начало строки?

#powershell

#powershell

Вопрос:

Использование Write-Host в подвыражении $() всегда выводит в начало строки, независимо от ее позиции.

Например:

 "This is $(Write-Host 'now at the beginning' -NoNewline)"
  

Выводит:

 now at the beginningThis is
  

Другие командлеты работают здесь, как и ожидалось (например "Today is $((Get-Date).DayOfWeek)" , Today is Friday ).

Чем отличается Write-Host ?

Комментарии:

1. Write-Host записать строку в host и ничего не возвращать.

Ответ №1:

Он не «выводит в начало строки», он записывает на хост дважды, в обратном порядке.

  1. "abc $()" это строковый литерал, который включает подвыражение.
  2. Вычисление того, что представляет собой строка, означает оценку $()
  3. Оценка $() записи на экран now at the beginning и ничего не возвращает
  4. Теперь строковый литерал "abc"
  5. Теперь "abc" записывается на экран now at the beginningabc

Это не то, что вы предлагаете:

  1. "abc $(write-host 'hi')"
  2. "hiabc"
  3. запись на экран.