PowerShell 4 ISE
PS> $MyFile = "MyFile.txt"
PS> $a = "dir $MyFile"
PS> $a
> dir MyFile.txt
PS> $($a)
> dir MyFile.txt
为什么$($a)
不执行命令“dir MyFile.txt”
?
提前致谢。
最佳答案
这是 powershell 中的预期行为。您必须记住您要分配给 $a
的内容,在本例中是 [String]
。
$(...)
语法确实执行 ...
并返回结果,但在这里它是“执行”字符串文字,就像如果您已将其输入命令行,这是关键带引号。
您可能一直认为它的工作方式更像 bash,确实如此,但不完全是因为您无法将命令分配给变量;它们必须在脚本中逐字输入:
$(dir MyFile.txt)
另一方面,你可以这样做:
$(Invoke-Expression $a)
但通常,当您将复杂的内容嵌入字符串文字时,您只需要 $()
语法:
"I like files named $(dir MyFile.txt)"
关于PowerShell $($a) 有意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33424797/