Заменить член переменной внутри строки в Powershell - PullRequest
6 голосов
/ 25 октября 2008

У меня есть следующее строковое выражение в скрипте PowerShell:

"select count(*) cnt from ${schema}.${table} where ${col.column_name} is null"

Схема и таблица соответствуют значениям $ schema и $ table соответственно. Однако для $ {col.column_name} указана пустая строка. Как я могу указать на член переменной как часть подстановки строки?

Ответы [ 3 ]

9 голосов
/ 25 октября 2008

Как насчет:

"select count(*) cnt from $schema.$table where $($col.column_name) is null"
4 голосов
/ 12 ноября 2008

Я думаю, что ваша проблема в основном связана с синтаксисом. Если у вас есть переменная с именем $ foo, $ {foo} ссылается на эту же переменную. Итак, ссылки $ {table} и $ {schema} в вашей строке sql работают нормально.

Проблема связана с $ {col.column_name}. Ваша переменная (я предполагаю) называется $ col, и имеет член с именем column_name. Как Роберт, так и Стивен оба указывают в своих ответах, чтобы ссылаться на это, вы должны использовать $ ($ col.column_name). В общем случае $ (выражение) будет заменено значением выражения.

Причина использования фигурных скобок в именах переменных заключается в том, что переменные могут иметь необычные символы в своих именах. Я бы рекомендовал не использовать синтаксис $ {} (если у вас нет веских причин) и заменять его прямыми ссылками $ var для переменных и $ ($ var.member) для ссылок на члены в строках.

3 голосов
/ 25 октября 2008

Один путь будет:

"select count(*) cnt from $schema.$table where $($col.column_name) is null"

Другой вариант будет

"select count(*) cnt from {0}.{1} where {2} is null" -f $schema, $table, $col.column_name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...