Как сделать вывод команды Powershell concat и строку? - PullRequest
2 голосов
/ 06 сентября 2011

Обратите внимание:

PS Z:\dev> echo $(hg root)\windows
Z:\dev
\windows
PS Z:\dev>

Я хочу видеть Z: \ dev \ windows . Попытка процитировать $ (hg root) не помогает.

EDIT

Обратите внимание:

PS Z:\dev\windows\nc> echo $((hg root).Trim())\Windows
Z:\dev
\Windows
PS Z:\dev\windows\nc> $r = (hg root).Trim()
PS Z:\dev\windows\nc> echo $r\Windows
Z:\dev\Windows
PS Z:\dev\windows\nc> $r = hg root
PS Z:\dev\windows\nc> echo $r\Windows
Z:\dev\Windows
PS Z:\dev\windows\nc>

Я хотел бы сузить сферу моего вопроса. Меня особенно интересует однострочное решение, так как я привык это делать в bash ( echo `hg root` / windows просто работает)

РЕДАКТИРОВАТЬ 2

PS Z:\dev> write-host $(hg root)\windows
Z:\dev \windows
PS Z:\dev> write-host $((hg root).Trim())\windows
Z:\dev \windows
PS Z:\dev>

Write-Host тоже не годится - обратите внимание на пробел между Z: \ dev и \ windows в выводе.

Ответы [ 2 ]

2 голосов
/ 06 сентября 2011

Похоже, что результат 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"
0 голосов
/ 12 июня 2018

(Опубликованный ответ от имени автора вопроса) .

Видимо, мне нужно больше спать:

PS Z:\dev> echo "$(hg root)\windows"
Z:\dev\windows
PS Z:\dev>

Примите мои извиненияэтот вопрос - я забыл попробовать кавычки вокруг всего выражения.

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