$var="The quick brown fox"
$words = $var.Split(" ", [StringSplitOptions]::None)
echo $words[0] $words[2]
该程序的输出是
The
brown
为什么.Split()
在输出的每个元素的末尾添加换行符?
我该如何防止这种情况?
我希望输出为
The brown
答案 0 :(得分:3)
Write-Output
(echo ($words[0] + " " + $words[2])
的别名)“添加”它,如果将其修改为
The brown
将导致
Write-Host $words[0] $words[2]
实质上发生的是你在管道中输出2个对象(字符串),每个对象都在一行中显示
如果你只想打印出一些东西而不把它放到管道中,你可以使用
.
答案 1 :(得分:0)
为什么.Split()在输出的每个元素的末尾添加一个换行符?
因为如果对文本使用它会创建字符串数组:
对文本文件或命令的字符串输出使用Split()时,您正在处理数组。 PowerShell会自动将文本文件的每一行转换为数组的元素。
(来自SS64)
从字符串数组创建单个字符串的唯一方法是加入它们:
$words = $var.Split(" ", [StringSplitOptions]::None) -join ' ' # joining symbol
BTW空格/换行符/制表符是默认的拆分符号。所以你可以稍微简化你的代码:
$words = $var.Split() -join ' '
答案 2 :(得分:0)
Split不会将换行符放入其默认输出格式,因为传递给echo的每个对象都是单独写入的。连接单词的紧凑方法是在双引号内使用数组表达式的插值。
echo "$($words[0,2])"
这样的插值数组表达式使用变量$OFS
的值连接,默认情况下是变量空格。
P.S。你甚至不需要echo
命令,只需将引用的字符串放在一行就会导致它的输出。
为了好玩,这里有一个单行,可以做你想要的,而不需要变量$words
:
"$((-split $var)[0,2])"