如下翻译来自微软
TechNet
脚本中心
:
http://www.microsoft.com/technet/scriptcenter/resources/pstips/jun07/pstip0622.mspx
译者: Edengundam(马涛)
访问数组中的值(Accessing Values in an Array)
无论脚本专家的生活方式多么值得憧憬(例如, 仅在过去一年脚本专家Jean Ross和Greg Stemp出现在了各个地方, 从Orlando, FL 到 … 恩,还是Orlando, FL), 本质上来说他们是追求着简约的常人. 以Windows PowerShell为例. 如果问100个人他们最喜欢Windows PowerShell的什么特性时, 你很可能会得到100种不同的答案, 这些答案中大多数是精妙的新特性, 例如: 访问.NET框架的功能. 如果询问脚本专家 (scripting guys) 他们最喜欢Windows PowerShell的什么特性, 你很可能得到相同的答案: Windows PowerShell为我们营造的访问书中值的帅气的方法.
如果你是熟悉VBScript的话, 对于数组来说你可能会感觉到有些可怕. 为什么? 恩, 有一点就是, 你不能回显任何数组的值; 这将导致“类型不匹配”的错误. 例如, 看看下面的VBScript脚本:
x = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
Wscript.Echo x
这能做到吗? 你已经知道答案了, 不是嘛? 不行, 它更本不能做到. 取而代之的是, 你需要使用For Each或For Next循环结构来获取x中的值:
x = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
For Each y in x
Wscript.Echo y
Next
这没什么难得, 但是这要求我们完成一些工作.
除此之外, 你可能还需要预先确定x在第一次使用时是数组类型(这就需要你做更多的事情). 毕竟, 对非数组对象执行循环操作, 将会导致错误的发生:
x = 1
For Each y in x
Wscript.Echo y
Next
这个例子中我们将得到的返回结果就是“Object not a collection.”
使用Windows PowerShell, 一切都会截然相反. 例如, 思考如下的Windows PowerShell脚本:
$x = 1,2,3,4,5,6,7,8,9,10
$x
运行这个脚本将会发生什么呢? 这些就是将会发生的结果:
1
2
3
4
5
6
7
8
9
10
换句话说, Windows PowerShell通过回显数组本身, 使得您能访问数组的所有值(此例中: $x). 你不需要使用For Each循环或者For Next循环; PowerShell已经为您完成了.
当然, 使用VBScript你不一定访问数组中所有的成员; 你可以通过指定下标来访问特定的数组元素. 例如, 假设你希望访问下面数组的第三个元素:
x = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
由于数组在VBScript (在PowerShell中也一样)是“基于0的”也就是说数组第一个元素的下标是0, 第二个元素下标是1, 如法炮制第三个元素的下表就是2. 我们如何只访问第三个元素? 使用类似这样的代码即可:
Wscript.Echo x(2)
正如您所料,Windows PowerShell 使您能够执行相同的操作,并使用非常类似语法; 例如, 下面代码将会回显PowerShell 数组的第三个元素:
$x[2]
这只是个最基本的应用. 要回显该数组中的最后一个元素? 这在VBScript中是可行的, 使用类似下面这样有点疯狂的结果即可:
Wscript.Echo x(Ubound(x))
在Windows PowerShell中完成同样的工作:
$x[-1]
这是什么怪物啊? 那么返回数组中倒数第二个元素? 没问题(译注: 这种语法在Perl中是允许的, 但是, 应该尽量避免使用这种语法, 使用数组的Length属性更好一些. ):
$x[-2]
以此类推.
别急, 还没完呢. 假设你希望回显索引号为1, 3, 5和7的元素值? 不管你信不信, 一样没问题; 只需要确保使用逗号分隔每个元素的索引数字:
$a[1,3,5,7]
现在上演压轴好戏. Windows PowerShell提供了“数值范围”运算符(..), 允许你指定一个数值范围, 它非常适合用于处理数组. 假设你有含有100元素的数组, 我们需要回显索引为37-79的数值. 如果我们真的想做, 我们可以列出每个索引. 或者我们适用范围运算符来代替这种不太可行的办法:
$a[37..79]
太棒了, 不是嘛? 更加令人振奋的是(译注:此处英文习语: add icing to the cake. 在某些时候可以翻译为双喜临门, 但是此文章, 我选择了保留句子关系和语气, 将句子调整通顺.), 范围运算符不仅仅限制在数组使用. 例如, 试试这个单行的脚本, 看看会发生什么:
1..100
甚至连这些追求简约的人也已经被PowerShell的优点深深的吸引了. (译注: 这篇文章中形容脚本专家的英文单词为: simple people with simple tastes, 我是根据面对100个脚本专家得到相同答案这里, 推测: 脚本专家希望以最简约的形式完成问题. 通过全文展示, PowerShell相比Vbscript来说, 数组访问上更加简单, 强大. 因此面对这些挑剔的追求简约之人来说, PowerShell能够达到他们的要求. 如果您对本篇文章有任何的翻译建议, 请您联系我, 希望共同提高翻译水平. )