Похоже, что результат hg root
включает перевод строки. Две возможности:
echo $((hg root).Trim())\Windows
$r = (hg root).Trim()
echo $r\Windows
(Я бы предпочел использовать последнее, поскольку оно яснее, особенно в сценариях.)
Дополнительно (на основе комментариев и дополнительных вопросов):
Непонятно, почему первый подход не работает, так как у меня не установлен Mercurial (я полагаю), я пытался:
echo Foo$((Out-String -InputObject "Bar`n").Trim())Bax
, который дает результат в одну строку:
FooBarBax
Моей первой мыслью было бы очень внимательно посмотреть на вывод hg root
(например, через шестнадцатеричный дамп, такой как PSCX Format-Hex
).
Для однострочного решения напомним, что грамматика: $(‹statement list›)
, поэтому две строки моего второго подхода можно объединить с конвейером:
echo "$(hg root | % {$_.Trim()})\Windows"
(также помещая весь аргумент в Write-Host
(echo
, являющийся псевдонимом) в кавычки, чтобы сделать вещи немного понятнее). Или даже используя два утверждения:
echo "$($a = hg root; $a.Trim())\Windows"