2014-12-09 11 views
1

Я пытаюсь заменить шаблон, используя строку, которая является конкатенация обратных ссылок и локальной переменной:Powershell Заменить обратные ссылки и локальная переменная

(Get-Content $nuspecPath) | Foreach-Object {$_ -replace "(<version>).+(<\/version>)", "`$1$version`$2"} | Set-Content $nuspecPath 

Ожидаемое: <version>2.0-preview</version>

Фактический: 2.0-preview</version>

Однако, если я добавлю пробел между переменными типа «$1 $version $ 2», я получаю <version> 2.0-preview </version>, как и ожидалось.

Мысли?

Спасибо, Dan

ответ

2

Хм, это работает для меня, как вы изначально иметь его на PowerShell v4. Но когда я сталкиваюсь с проблемой вроде этого, я обычно решаю ее с фигурными фигурными скобками, например. $ {1}

$version = '2.0-preview' 
"<version>1.0.0.0</version>" -replace "(<version>).+(<\/version>)", "`${1}$version`$2" 

Поставив имя переменной в фигурные скобки, PowerShell может сказать, где одна переменная заканчивается и начинается другой. Также подтвердили, что ваш оригинальный подход действительно не работает в одной из моих систем PowerShell v3.

+0

Спасибо. Похоже, как-то он пытается включить то, что после 1, чтобы быть частью обратной ссылки ... ваше решение прекрасно работает, и я читаю в другом потоке, который также называется ссылкой. :) – DanverZ