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

Arrays 如何使拆分不在每个元素的末尾添加换行符,arrays,string,powershell,split,Arrays,String,Powershell,Split,这个程序的输出是 棕色的 为什么.Split()在输出的每个元素末尾添加一个换行符? 我怎样才能防止这种情况 我希望输出是 brown 它是echo(写入输出的别名)“添加”它,如果您将其修改为 $var="The quick brown fox" $words = $var.Split(" ", [StringSplitOptions]::None) echo $words[0] $words[2] 这将导致 brown 实际上,您在管道中输出了两个对象(字符串),每个对象都显示在自己

这个程序的输出是


棕色的
为什么
.Split()
在输出的每个元素末尾添加一个换行符? 我怎样才能防止这种情况

我希望输出是

brown

它是
echo
(写入输出的别名)“添加”它,如果您将其修改为

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

brown
实际上,您在管道中输出了两个对象(字符串),每个对象都显示在自己的行中

如果你只是想打印出一些东西,而不把它放到管道中,你可以使用它

echo ($words[0] + " " + $words[2])
为什么.Split()会在输出的每个元素的末尾添加一个换行符

因为如果用于文本,它会创建字符串数组:

对文本文件或命令的字符串输出使用Split()时,处理的是数组。PowerShell会自动将文本文件的每一行转换为数组的一个元素

(来自)

从字符串数组创建单个字符串的唯一方法是将它们连接起来:

Write-Host $words[0] $words[2]
顺便说一句,空格/换行符/制表符是默认的拆分符号。因此,您可以稍微简化代码:

$words = $var.Split(" ", [StringSplitOptions]::None) -join ' ' # joining symbol

Split不是将换行符放入,而是默认的输出格式,因为传递给echo的每个对象都是单独写入的。连接单词的一种简洁方法是在双引号内使用数组表达式的插值

$words = $var.Split() -join ' '
这样的插值数组表达式使用变量
$OFS
的值进行连接,默认情况下,该值是一个空格

另外,您甚至不需要使用
echo
命令,只需将带引号的字符串自身放在一行上,就可以得到输出

为了好玩,这里有一个单行程序,它不需要变量
$words

echo "$($words[0,2])"

你是对的-但我不明白-什么是$($words[0])-为什么是2$?为什么是()呢?如果我从你的陈述中去掉双引号,它会变成不同的形式lines@user93353它是一个子表达式,用于确保数组元素部分被理解,而不是字符串的一部分。子表达式由
$()
@Matt表示,感谢您的解释。然而,我更新了我的答案,因为我认为普通的
+
在这种情况下更具可读性:)这完全取决于OP想要做什么。子表达式对于较长的字符串非常有用。也可以使用格式运算符。。。。。。无限的可能性。FWIW数组索引选择器非常方便:
echo($words[0,2]-join“”)
特别是对于两个以上的元素。重要的一点是,仅在其中一个答案中提到的PowerShell进行实际拆分的方法是
$words=-split$var
。无需调用.NET Split方法。根据您的阅读方式,这就像是建议拆分负责新行。当然不是。这是一种很好的处理方法,但根本问题不是拆分,而是OP的输出方式。@Matt这些不是“新行”符号或其他东西。这些是单独的字符串显示在PS控制台的新行上。我知道。。。op已经认为它的拆分故障,并且正在添加新的线路。不是,这是我的观点。
"$((-split $var)[0,2])"