如何制作Powershell concat命令输出和字符串?

时间:2011-09-06 11:05:17

标签: powershell

观察:

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

我想看到的是 Z:\ dev \ windows 。试图引用$(hg root)没有帮助。

修改

观察:

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 个答案:

答案 0 :(得分:2)

看起来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's Format-Hex)。

对于单行解决方案,请记住语法:$(‹statement list›),因此我的第二种方法的两行可以与管道组合:

echo "$(hg root | % {$_.Trim()})\Windows"

(同时将整个论点放到引号中Write-Hostecho为别名)以使事情更清晰一些)。甚至使用两个陈述:

echo "$($a = hg root; $a.Trim())\Windows"

答案 1 :(得分:0)

(代表作者提问回答)

显然,我需要更多的睡眠:

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

请接受我对这个问题的道歉 - 我忘了试试整个表达的引号。