powershell - 外壳 | 如何以编程方式遍历变量名
问题描述
我有这个代码:
$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
. 谢谢。
解决方案
你在尝试什么⚠️
您可以使用Get-Variable
cmdlet 获取变量。默认情况下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
推荐阅读
- html - VSCode Emmet html样板?
- esp8266 - 如何为 ESP8266 实现 100 微秒的股票回调?
- bash - 使用 jq 从变量中更改 json 对象和字段值
- android - 扩展 MaterialButton 时,我无法检索在 styles.xml 中设置的自定义属性
- javascript - Javascript没有在laravel宅基地应用程序上触发
- c - 如果我想访问文件中的不同信息,是否必须多次 fseek?
- c++ - 如何有效地将左值或右值绑定到同一个引用?
- sas - sas 使文件夹名称中带有助记符的目录
- github - GitHub Repo 的 Google Cloud Builds 触发器始终显示“没有标签匹配”
- javascript - Asp:Calendar 总是返回默认日期,而不是单击按钮后用户选择的日期