我正在尝试从Powershell调用另一个应用程序(Beyond Compare),它在典型的命令行中需要@:
C:\deploy>bcompare @static.diff
我找到了Powershell的Invoke-Expression,但是当我尝试以下操作时它会给我一个错误:
PS C:\deploy>Invoke-Expression "bcompare @static.diff"
Invoke-Expression : Cannot expand the splatted variable '@static'. Splatted variables
cannot be used as part of a property or array expression. Assign the result of the
expression to a temporary variable then splat the temporary variable instead.
At line:1 char:18
+ Invoke-Expression <<<< "bcompare @static.diff"
+ CategoryInfo : ParserError: (:) [Invoke-Expression], ParseException
+ FullyQualifiedErrorId : NoPropertiesInSplatting,Microsoft.PowerShell.Comands.InvokeExpressionCommand
我无法让@在这里正确逃脱。我已经尝试了`,@ @,将命令的一部分放在一个临时变量中,但没有一个能做到这一点。
答案 0 :(得分:10)
bcompare '@static.diff'
如果有疑问,请将其放入字符串中: - )
PS Home:\> args '@static.diff'
argv[0] = "C:\Users\Joey\Batches\args.cmd"
argv[1] = @static.diff
答案 1 :(得分:4)
你需要双倍逃避,因为你正在经历两个层面的解释。只有一个`不起作用,因为它在字符串创建过程中被解析。
Invoke-Expression "bcompare ``@static.diff"
或正如乔伊所说。
Invoke-Expression "bcompare '@static.diff'"
答案 2 :(得分:1)
当我遇到同样的问题时,我使用反引号来对@ -sign进行字面解释。我也希望使用双引号进行变量处理:
Invoke-Expression“&amp; bcompare` @ $ compareCommands $ file1 $ file2”
答案 3 :(得分:-1)
在Windows命令行上的 npm install 上出现错误
拼写运算符'@'不能用于引用表达式中的变量。
npm install @neville.dabreo/greetingbot
The splatting operator '@' cannot be used to reference variables in an expression.
但是单引号解决了问题
npm install '@neville.dabreo/greetingbot'
注意-NPM官方网站没有提及单引号。