2016-09-22 94 views
0

我存储了大量的依赖于其他变量的变量,这本身依赖于其他变量,就像这样:访问哈希表中的值相同的哈希表在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 

有没有一种方法,我可以访问相同的哈希表内的哈希表的价值?感谢:-)

回答

1

尝试在括号包裹,这对我的作品(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 
+0

这不是很清楚我的想法为什么需要这样做,但它也指出我正在使用下划线(_)而不是点(。)。非常感谢 ! –

+0

我的坏,它不起作用。您可能已尝试多次,这会导致powershell注册$ soft.version值。因此,当您引用$($ soft.version)时,powershell已经在内存中拥有整个$ soft哈希表。我不知道这对你是否清楚,但是尝试打开一个新的ps会话,复制粘贴你的代码并调用$ soft,你会看到。谢谢你尝试! –

+0

你完全正确,阿德里安。我很确定,PS不支持递归声明,因为当var被赋值给另一个var时,var的值是未知的。 – Martin