观察:
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 之间的空格。
答案 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-Host
(echo
为别名)以使事情更清晰一些)。甚至使用两个陈述:
echo "$($a = hg root; $a.Trim())\Windows"
答案 1 :(得分:0)
(代表作者提问回答)。
显然,我需要更多的睡眠:
PS Z:\dev> echo "$(hg root)\windows"
Z:\dev\windows
PS Z:\dev>
请接受我对这个问题的道歉 - 我忘了试试整个表达的引号。