PS> $MyFile = "MyFile.txt"
PS> $a = "dir $MyFile"
PS> $a
> dir MyFile.txt
PS> $($a)
> dir MyFile.txt
为什么$($a)
不执行命令"dir MyFile.txt"
?
提前致谢。
答案 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。