gkn*_*uth 5 syntax powershell command-line-arguments
在 GNU/Linux 中我会这样做:
PROGPATH=/long/and/complicated/path/to/some/bin
$PROGPATH/program args...
Run Code Online (Sandbox Code Playgroud)
但在 Powershell 中如果我尝试这样做:
$PROGPATH=\long\and\complicated\path\to\some\bin
$PROGPATH\program args...
Run Code Online (Sandbox Code Playgroud)
我得到:
At script.ps1:2 char:...
+ $PROGPATH\program args ...
+ ~~~~~~~~
Unexpected token '\program' in expression or statement.
+ CategoryInfo : ParserError: (:) [], ParseException
+ FullyQualifiedErrorId : UnexpectedToken
Run Code Online (Sandbox Code Playgroud)
那么我该如何做这个我知道如何在 bash、Powershell 中做的简单事情呢?
js2010的有用答案显示了正确的解决方案:
因为您的命令名称/路径包含变量引用( $PROGPATH/...),所以您必须使用 来调用它&:如果使用分组表达式或涉及子表达式,& $PROGPATH\program args...
则同样适用。(...)$(...)
此外,如果命令名称/路径被引用('...'或"...")[1] ,则同样适用,例如,如果路径包含空格则需要如此。
换句话说:仅当命令名称/路径是逐字的、不带引号的字符串[1]时,才支持直接调用;在所有其他情况下,&必须使用。
至于为什么:
&,调用运算符对于强制将语句解释为命令是必要的,即以参数模式对其进行解析(见下文),以便导致命令执行而不是表达式求值。
PowerShell 有两种基本解析模式:
参数模式,其工作方式类似于传统的 shell,其中第一个标记是命令名称/路径,例如 cmdlet 或外部程序,后续标记表示参数,仅当它们包含 shell元字符(chars.with对 PowerShell 有特殊含义,例如分隔标记的空格)。
表达式模式,其工作方式类似于编程语言中的表达式。
PowerShell 根据语句的第一个标记决定应用哪种解析模式:
除其他事项外,如果第一个标记以变量引用开头或者是带引号的字符串,则 PowerShell 将以表达式模式进行解析。
\ 启动一个新的标记,无法识别的标记\program会导致您看到的语法错误。/,它将被解释为除法运算符,并且program不会是有效的除数操作数。)[1] 请注意,如果您的可执行路径是文字字符串(不包含表达式的变量引用),您也可以使用 -转义`单个字符(空格)来代替将整个字符串包含在'...'或中"...",在这种情况下&则没有必要;例如:
C:\Program` Files\Notepad++\notepad++.exe
对于文字字符串,只要第一个标记不带引号,您甚至可以使用部分单引号或双引号;例如:
C:\"Program Files"\Notepad++\notepad++.exe
| 归档时间: |
|
| 查看次数: |
649 次 |
| 最近记录: |