powershell - 使用字符串引用时,引用 Powershell 数组索引会产生意外结果

标签 powershell

如果您有以下情况,我正在尝试找出为什么会发生以下情况

$arr = @("Filename1", "Filename2")
for($i =0; $i -le $arr.Length -1; $i++) {

   write-host ".\"$arr[$i]
   write-host ".\$arr[$i]"
   write-host $arr[$i] 
}

所以只需要一个循环就可以产生:
".\ Filename1"
".\ Filename1 Filename2[0]"
"Filename1"

仅引用 array[index] 将产生正确的值,但如果我与字符串连接,它会在字符串和值之间放置一个空格。当放置在字符串中时,我认为它正在转储整个内容,因为它正在评估 $array 然后评估 $i 结束

“.\文件名1 文件名2[索引号]”

但是,如果我将单个值分配给一个单独的变量并将其与一个字符串连接起来,就没有空格了吗?这是为什么:

例子:
 $name = $arr[$i]
 write-host ".\$name"

输出 = ".\filename1"

哪个是正确的。

最佳答案

你必须要做:

write-host ".\$($arr[$i])"

以便将其评估为数组索引。

在字符串中访问对象的属性或哈希键等就是这种情况:
PS > $a = @{test="A";test2="B"}
PS > write-host "$a.test"
System.Collections.Hashtable.test
PS > write-host "$($a.test)"
A

另一种选择是使用字符串格式,当字符串中有很多变量/对象时特别有用:
write-host (".\{0}" -f $arr[$i])

关于powershell - 使用字符串引用时,引用 Powershell 数组索引会产生意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8592677/

相关文章:

powershell - IIS PowerShell应用程序池设置为 'NetworkService'帐户

powershell - 无法调用此函数,因为当前主机没有实现它

powershell - 如何在执行静默安装时异步运行进度条?

powershell - 如果文件名包含字符串,则将文件移到目标位置

Powershell v2 远程处理和委派

xml - 如何使用 Powershell 删除 xml 文件中的 <w :documentProtection . ../> 行?

powershell - Powershell:一些简单的编号

PowerShell - 使用管道中的管道进行锯齿状数组过滤

powershell - 将密码硬编码到 powershell "New-PSSession"

regex - Powershell-如何根据各种字符和10位数字拆分字符串?