Экранирование разделенных переменных в Powershell Invoke-Expression - PullRequest
7 голосов
/ 06 апреля 2011

Я пытаюсь вызвать другое приложение (Beyond Compare) из Powershell, для которого требуется @ в типичной командной строке:

C:\deploy>bcompare @static.diff

Я нашел выражение вызова Powershell, но при попытке выполнить следующее выдает ошибку:

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

Я не могу заставить @ сбежать как следует. Я пробовал `, @@, помещать части команды во временную переменную, но ни одна из них не сработала.

Ответы [ 4 ]

10 голосов
/ 06 апреля 2011
bcompare '@static.diff'

Если сомневаетесь, поместите его в строку: -)

PS Home:\> args '@static.diff'
argv[0] = "C:\Users\Joey\Batches\args.cmd"
argv[1] = @static.diff
4 голосов
/ 07 апреля 2011

Вам нужно удвоить побег, потому что вы проходите два уровня интерпретации.Только один `не будет работать, потому что он анализируется при создании строки.

Invoke-Expression "bcompare ``@static.diff"

Или, как сказал Джои.

Invoke-Expression "bcompare '@static.diff'"
1 голос
/ 06 апреля 2011

Когда я столкнулся с той же проблемой, я использовал обратную галочку, чтобы символ @ интерпретировался буквально.Я также хотел использовать двойные кавычки для обработки переменных:

Invoke-Expression "& bcompare` @ $ compareCommands $ file1 $ file2 "

0 голосов
/ 15 марта 2019

Я получаю сообщение об ошибке при npm установке в командной строке Windows

Оператор разбивки '@' нельзя использовать для ссылки на переменные в выражении.

npm install @neville.dabreo/greetingbot

The splatting operator '@' cannot be used to reference variables in an expression.

Но одиночные кавычки решили проблему

npm install '@neville.dabreo/greetingbot'

ПРИМЕЧАНИЕ. - Официальный сайт NPM не упоминает ни одной кавычки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...