为什么Powershell不评估表达式

时间:2015-08-06 22:40:59

标签: string powershell

而不是写这个

declare @name varchar(255),
     @table varchar(255) = 'mytable',
     @column varchar(255) = 'mykeycolumn',
     @validkey varchar(255) =  'mykeyIwanttokeep'

SELECT @name = CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE TABLE_NAME = @table
    AND COLUMN_NAME =  @column
    AND (CONSTRAINT_NAME != @validkey or @validkey is null)

declare @sql varchar(1023) = 'alter table ' + @table + ' drop ' + @name 

exec (@sql)

我想要这样的事情:

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

但是Powershell没有评估表达式,为什么:什么是正确的语法?

为什么这样做而不是上述(见List all nodes which sub-node meta contains some value 123456)?

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

1 个答案:

答案 0 :(得分: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只关心字符串末尾的引号字符。