访问哈希表中的值相同的哈希表在PowerShell中
问题描述:
我存储了大量的依赖于其他变量的变量,这本身依赖于其他变量,就像这样:访问哈希表中的值相同的哈希表在PowerShell中
$soft_version = "5.8.2"
$soft_filename = "somesoft-${soft_version}.exe"
$soft_path = "/some/path/$soft_filename"
$soft_call_args = "/S /forcerestart"
而且我想存储该哈希表,这样我可以更方便地访问这些值:所以我尝试了以下
$soft = @{
version="5.8.2";
filename="somesoft-${soft.version}.exe"
path="/some/path/$soft.filename"
call_args = "/S /forcerestart"
}
所以,我可以访问这样的价值观:
$soft.version
$soft.filename
$soft.path
$soft.call_args
但它似乎没有工作,对应的键保持为空:
$soft
Name Value
---- -----
filename somesoft-.exe
path /some/path/
call_args /S /forcerestart
version 5.8.2
有没有一种方法,我可以访问相同的哈希表内的哈希表的价值?感谢:-)
答
尝试在括号包裹,这对我的作品(PSVersion 5):
$soft = @{
version="5.8.2";
filename="somesoft-$($soft.version).exe"
path="/some/path/$($soft.filename)"
call_args = "/S /forcerestart"
}
结果
$soft
Name Value
---- -----
filename somesoft-5.8.2.exe
path /some/path/somesoft-5.8.2.exe
call_args /S /forcerestart
version 5.8.2
这不是很清楚我的想法为什么需要这样做,但它也指出我正在使用下划线(_)而不是点(。)。非常感谢 ! –
我的坏,它不起作用。您可能已尝试多次,这会导致powershell注册$ soft.version值。因此,当您引用$($ soft.version)时,powershell已经在内存中拥有整个$ soft哈希表。我不知道这对你是否清楚,但是尝试打开一个新的ps会话,复制粘贴你的代码并调用$ soft,你会看到。谢谢你尝试! –
你完全正确,阿德里安。我很确定,PS不支持递归声明,因为当var被赋值给另一个var时,var的值是未知的。 – Martin