有关PowerShell中命令执行的问题

Jas*_*ner 2 powershell

有人可以帮我解释一下这里发生了什么吗?很抱歉,如果这是一个基本问题,我将其从我正在尝试编写的管道表达式中简化:

$foo = pwd
$cmd = "dir"

& $cmd $foo #Works

dir $foo  #Works

& "dir $foo" #Error
Run Code Online (Sandbox Code Playgroud)

*术语'dir C:\'不被识别为cmdlet,函数,可操作程序或脚本文件.验证该术语,然后重试.

在行:1 char:2 +&<<<<"dir $ foo"*

dir pwd #Error
Run Code Online (Sandbox Code Playgroud)

*Get-ChildItem:找不到路径'C:\ pwd',因为它不存在.

在行:1 char:4 + dir <<<< pwd*

我希望所有这四个产生相同的结果

mob*_*mob 5

引号中的表达式被解释为单个参数.在第三个命令中,shell将其解释为对dir C:\没有参数的命令" dir" 的请求,而不是对参数为" C:\" 的命令" " 的请求.


Kei*_*ill 5

如果要"执行"包含任意脚本的字符串,请使用Invoke-Expression cmdlet,例如:

Invoke-Expression"dir $ foo"

  • &是呼叫运营商.它只是将其后面的字符串解释为命令的"名称".所以你不能在字符串中包含参数.顺便说一句,你可以用点来做同样的事情,例如".$ foo".区别在于&将导致命令在新的嵌套范围内执行,而dotting在当前范围内执行命令.这通常仅在命令是脚本文件的名称或路径时才重要. (2认同)