首页 > 解决方案 > 外壳 | 如何以编程方式遍历变量名

问题描述

我有这个代码:

$a1 = "value1"
$a2 = "value2"
$a3 = "value3"
$a4 = "value4"
$a5 = "value5"

DO {
    "Starting Loop $a1"
    $a1
    $a1++
    "Now `$a is $a1"
} Until ($a1 -eq "value5")

我试图让循环一旦到达就停止value5。问题是我如何才能通过所有变量,所以如果$a1不是value5,请转到$a2. 谢谢。

标签: powershell

解决方案


你在尝试什么⚠️

您可以使用Get-Variablecmdlet 获取变量。默认情况下Get-Variable(和对应的Set-Variable)将包括所有已知变量,包括您创建的其他变量(例如$b1 = "valueB1")、自动变量(例如$args)以及从父范围继承的所有内容。
因此,您需要非常小心地使用这些 cmdlet,因为您可能很容易检索或覆盖错误的变量。

$a1 = "value1"
$a2 = "value2"
$a3 = "value3"
$a4 = "value4"
$a5 = "value5"

$a = 1
DO {
    "Starting Loop `$a$a"
    Get-Variable -ValueOnly "a$a"
    Set-Variable "a$a" "NewValue$a"
    Get-Variable -ValueOnly "a$a"
    $a++
} Until ($a -gt 5)

但正如已经建议的那样,这不是你应该这样做的方式!.

反而

使用哈希表创建一个新的自定义变量列表,并在其中读取和写入您的值:

$a = @{}                        # create a hash table
1..5 |% { $a[$_] = "value$_" }  # count from 1 to 5 ($_ is the current item)
$a[3]                           # display the $a[3]

value3

推荐阅读