2008-10-25 2 views
6

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

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

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

ответ

9

Как насчет:

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

Один из способов будет:

"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 
4

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

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

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

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