如何理解powershell中的foreach循环

时间:2014-07-02 11:16:48

标签: powershell

嗨,我是每个人都是新手,并尝试对每个循环有所了解但我不明白+ $在下面的脚本中意味着什么以及为什么它们一起使用

$names = "jones","mike","Ash"
foreach ($name in $names)
{
    "$name = " + $name.length
}

2 个答案:

答案 0 :(得分:4)

首先,它是 PowerShell 。没有空间并且观察字母的大小写。

第二,RTFM。 Technet上有很多文档。利用它。有内置的帮助。阅读Help about_*主题。

回到你的问题,foreach循环遍历所有集合。在您的示例中,$names是一个字符串数组。数组是一个集合。

在您的示例中,当foreach循环遍历集合时,它会将集合中的每个项目复制到另一个名为$name的变量。

foreach ($name in $names) {}

foreach循环中,您可以使用$name变量来检索项目中存储的值。因此,以下代码将打印集合中的值。

foreach ($name in $names) {
    $name
}

$name是一个字符串。因此,$name.Length为我们提供了该字符串的长度。

+是算术运算符。它可以用于连接字符串。在这种情况下,$name + $name.length将导致值附加长度。

以下是带输出的修改示例:

$names = "jones","mike","Ash"
foreach ($name in $names)
{
    $name + $name.Length
}

jones5
mike4
Ash3

最后,来看你的例子和输出:

$names = "jones","mike","Ash"
foreach ($name in $names)
{
    "$name = " + $name.Length
}

jones = 5
mike = 4
Ash = 3

我希望这可以为你提供一些关于这个例子正在做什么的解释。

答案 1 :(得分:1)

让我们一步一步地看到:

$names = "jones","mike","Ash"

这声明了一个包含三个字符串项的数组,并将其存储在$ names变量中。

foreach ($name in $names) { }

这是一个遍历$ names数组变量中所有项的循环。每个项目都“复制”到“$ name”变量中,因此当您使用$name时,您正在使用循环中的当前项目。

"$name = " + $name.length

这将输出$ name变量的内容和$ name表示的对象的“length”属性。如果你还记得,我们声明了一个字符串项数组,换句话说是字符串对象。字符串对象具有属性和方法,其中一个属性是length属性,用于指示字符串的长度。

但是,符号有点奇怪。在PowerShell中,嵌入到字符串文字中的变量(例如"start $name end")将替换为其字符串值,因此"start $name end"将成为第一个项目的start jones end。但是,您不能只写{ {1}},所以在这个例子中,作者使用+来连接(追加)两个字符串。另一种解决方案是"start $name.length end":这样一个字符串文字将包含字符串及其长度属性