如何使Split不在每个元素的末尾添加换行符

时间:2016-09-14 12:28:09

标签: arrays string powershell split

$var="The quick brown fox"
$words = $var.Split(" ", [StringSplitOptions]::None)
echo $words[0] $words[2]

该程序的输出是

The
brown

为什么.Split()在输出的每个元素的末尾添加换行符? 我该如何防止这种情况?

我希望输出为

The brown

3 个答案:

答案 0 :(得分:3)

Write-Outputecho ($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])"