arrays - PowerShell - 将计数器附加到数组变量并在之后使用它
问题描述
我有以下代码:
$CompletedCount = 0
$ArrayName1 = @('test','test1','test2')
$ArrayName2 = @('test3','test4','test5')
$Array = 0
while($true)
{
Write-Host $CompletedCount
$CompletedCount =2
if ($CompletedCount -gt 0)
{
$Array++
$ArrayToDo = "ArrayName{0}" -f $Array
Write-Host "Starting with $ArrayToDo"
foreach ($Name in $ArrayToDo)
{
Write-Host $ArrayToDo.Length
$Name
}
Start-Sleep -Seconds 5
}else
{
Write-Host "not able to start new batch, sleeping"
Start-Sleep -Seconds 10
}
}
在foreach ($Name in $ArrayToDo)
我希望它显示值的行中,$ArrayName1
但它唯一做的就是打印 10 和 ArrayName1 。为什么不“获取”数组变量并显示其值?
解决方案
您只想通过字符串名称来查找变量的值。当解析器看到$
字符串之外或像正则表达式这样的特殊情况时,它会将以下字符(只要它们是合法的变量字符)解释为变量名。因此,如果您在解析时没有为解析器提供变量名称$
(因为标记化发生在变量替换之前),那么您需要另一种方法。输入Get-Variable
。
$ArrayName1 = @('test','test1','test2')
$ArrayName2 = @('test3','test4','test5')
$Array = 1
while ($Array -le 2) {
$ArrayToDo = "ArrayName{0}" -f $Array++
foreach ($name in (Get-Variable $ArrayToDo -ValueOnly)) {
"A Name in $ArrayToDo"
$name
}
}
推荐阅读
- visual-studio-code - 在 VS.code 中使用现有的文档格式化程序
- java - Apache Camel File IO on linux
- node.js - How can I compare content of two web pages?
- sql-server - Linux SQL Server:如何允许远程连接?
- unity3d - 如何在 Unity 中进行平移?
- nuget - 如何使我正在创建的 nuget 包引用的 nuget 包安装为顶级包引用?
- javascript - TweenMax / GSAP 错开原始数组值
- python - 有没有一种方法可以根据同一序列化程序中另一个字段的值来初始化 django REST 序列化程序的属性值?
- swift - swift 4中两个节点之间的碰撞检测
- curl - 无法更改neo4j密码