2015-08-06 6 views
1

Вместо того, чтобы писать этотПочему Powershell не оценивает выражение

$criteria = 'id=' + '"' + $pdt_code + '"' 

Я хотел бы иметь что-то вроде этого:

$criteria = 'id="$($pdt_code)"' 

Но Powershell не оценивает выражение, почему: Что такое правильный синтаксис?

Почему это работает, а не выше (см. List all nodes which sub-node meta contains some value 123456)?

$meta = $xml.SelectSingleNode("//catalogue/produits/produit[@id='$($_.id)']/metas/meta[@code='$meta_code']") 

ответ

3

Будут оцениваться только переменные, находящиеся внутри двойных кавычек "...". Ваша строка один цитировал один:

$criteria = 'id="$($pdt_code)"' 
#   ^single quotes^

Вы должны вместо этого написать:

$criteria = "id=""$pdt_code""" 

Примечание также, что вам нужно удвоить " символы внутри строки, так что PowerShell обрабатывает их как буквальные " символов и а не конец строки.


Ваш второй пример работает, потому что он использует строку в двойных кавычках (что оценки переменных):

$meta = $xml.SelectSingleNode("//catalogue/produits/produit[@id='$($_.id)']/metas/meta[@code='$meta_code']") 
#       ^ double quotes               ^

При разборе строковый литерал, PowerShell заботится только о том, что котировка символы на концах строка.

+0

Спасибо. Можете ли вы ответить на мой следующий вопрос в моем обновлении? В другом примере нет необходимости использовать двойную кавычку. – user310291

+0

@ user310291 - См. Мое редактирование. Во втором примере вы используете двойную кавычку. – iCodez

+0

отмечен как правильный ответ спасибо. – user310291

Смежные вопросы