PowerShell $($ a)出现意外结果

时间:2015-10-29 21:19:47

标签: powershell

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"

提前致谢。

2 个答案:

答案 0 :(得分:4)

这是powershell中的预期行为。您必须记住您分配给$a,在这种情况下是[String]

$(...)语法执行...并返回结果,但是在这里它正在“执行”一个字符串文字,就像你在命令行中键入它一样,和这是关键 ,带引号

你可能一直认为它会像bash一样工作,但它确实有用,但并不完全是因为你无法将命令分配给变量;它们必须在字体中输入:

$(dir MyFile.txt)

另一方面,你可以这样做:

$(Invoke-Expression $a)

但是,当您将复杂的东西嵌入到字符串文字中时,通常只需要$()语法:

"I like files named $(dir MyFile.txt)"

答案 1 :(得分:0)

对于这种事情,脚本块比字符串更好一点。

试试这个:

$a = {dir $myfile}
$myfile = "sample.txt"
& $a

&符号是调用操作符,导致执行。执行脚本块比执行字符串更灵活。您可以定义包含多个命令的脚本块。这就是脚本块背后的想法。另请注意,直到运行时才会计算参数$ myfile。