如何在Powershell中执行类似于$PROGPATH/program的bash命令?

18 浏览
0 Comments

如何在Powershell中执行类似于$PROGPATH/program的bash命令?

在GNU/Linux中,我会这样做:\n

PROGPATH=/long/and/complicated/path/to/some/bin
$PROGPATH/program args...

\n但是在Powershell中,如果我尝试这样做:\n

$PROGPATH=\long\and\complicated\path\to\some\bin
$PROGPATH\program args...

\n我会得到以下错误:\n

在script.ps1的第2个字符处:...
+ $PROGPATH\program args ...
+          ~~~~~~~~
在表达式或语句中出现意外的标记'\program'。
+ CategoryInfo          : ParserError: (:) [], ParseException
+ FullyQualifiedErrorId : UnexpectedToken

\n那么我该如何在Powershell中做我在bash中知道如何做的这个简单的事情呢?

0
0 Comments

问题的原因是用户想知道如何在PowerShell中实现类似于bash中的$PROGPATH/program的功能,即使用变量来指定程序路径。

解决方法是使用调用运算符"&"来实现。在PowerShell中,可以使用"&"运算符来调用变量中存储的命令。例如,要调用$progpath变量中存储的路径的程序,可以使用以下代码:

$progpath = 'c:\windows\system32'
& $progpath\notepad somefile.txt

如果路径中包含空格,可以使用单引号将路径括起来,并使用"&"运算符来调用。例如:

& 'C:\Program Files\internet explorer\iexplore' yahoo.com

另一种选择是将路径添加到环境变量$env:path中,然后直接调用程序名称。例如:

$env:path += ';C:\Program Files\internet explorer'
iexplore yahoo.com

如果路径中有空格,可以使用反引号来转义空格。例如:

C:\Program` Files\internet` explorer\iexplore yahoo.com

以上就是解决这个问题的方法。用户可以根据自己的需求选择合适的方法来实现类似于bash中的$PROGPATH/program的功能。

0
0 Comments

在PowerShell中,如果命令名/路径包含变量引用,必须使用`&`来调用它。同样的规则也适用于使用分组表达式`(...)`或子表达式`$(...)`的情况。此外,如果命令名/路径被引用('...'或"..."),也是同样的规则适用,特别是如果路径包含空格。

换句话说,只有当命令名/路径是一个直接的、未引用的字符串时,才支持直接调用;在其他情况下,必须使用`&`。

为什么要这样做呢?这是因为`&`运算符是必需的,它强制将语句解释为命令,即在“参数模式”下进行解析,以实现命令执行而不是表达式求值。

PowerShell有两种基本的解析模式:

- 参数模式,类似于传统的shell,其中第一个标记是命令名/路径,如cmdlet或外部程序,后续标记表示参数,只有在包含shell元字符(对PowerShell具有特殊含义的字符,如用于分隔标记的空格)时才需要引号。

- 表达式模式,类似于编程语言中的表达式。

根据语句的第一个标记,PowerShell决定应用哪种解析模式:

- 如果首个标记以变量引用开头或为引用字符串,则PowerShell解析为表达式模式。

- 在表达式模式下,\将开始一个新的标记,并且无法识别的标记\program会导致你看到的语法错误。

注意,如果可执行文件路径是一个字面的字符串(不包含变量引用或表达式),你还可以使用`符号来转义单个字符(例如空格),而不是将整个字符串括在引号中。在这种情况下,`&`则不是必需的。

0