Заменить член переменной внутри строки в Powershell

StackOverflow https://stackoverflow.com/questions/235651

  •  04-07-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

Как насчет:

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

Другие советы

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

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

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

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

"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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top