如何使PowerShell连接一些命令输出和字符串?
注意:如何使PowerShell连接一些命令输出和字符串?,powershell,Powershell,注意: PS Z:\dev> echo $(hg root)\windows Z:\dev \windows PS Z:\dev> 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> echo $(hg root)\windows
Z:\dev
\windows
PS Z:\dev>
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>
我想查看Z:\dev\windows。尝试引用$(hg root)没有帮助
编辑
注意:
PS Z:\dev> echo $(hg root)\windows
Z:\dev
\windows
PS Z:\dev>
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`/windowsjust works)
编辑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>
写主机也不好-请注意输出中Z:\dev和\windows之间的空格。它看起来像是
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
的输出(例如,通过十六进制转储,例如)
对于单行解决方案,回想一下语法是$(èstatement list›)
,因此第二种方法的两行可以与管道结合使用:
echo "$(hg root | % {$_.Trim()})\Windows"
(同时将(echo
作为别名)的整个参数放在引号中,使事情更清楚一些)。甚至使用两种说法:
echo "$($a = hg root; $a.Trim())\Windows"
(代表问题作者发布答案)
显然,我需要更多的睡眠:
PS Z:\dev> echo "$(hg root)\windows"
Z:\dev\windows
PS Z:\dev>
请接受我对这个问题的歉意-我忘了尝试整个表达式的引号。一行解决方案不起作用,但这正是我想要的-我已经更新了我的帖子。谢谢。用
Write Host
代替echo
试试echo
是Write Output
的别名,例如,它将在单独的一行中输出每个项目。不好-再次编辑此帖子。我正在尝试再次关闭此帖子。