powershell中$ {}的含义是什么?

时间:2016-02-26 08:45:24

标签: powershell

我有一个脚本,其中函数参数表示如下:

param(
   ${param1},
   ${param2},
   ${param3}
)

这是什么意思?我一直无法找到相关文档。

以这种方式编写参数的重点是什么,而不是更常见的

param(
    $param1,
    $param2,
    $param3
)

4 个答案:

答案 0 :(得分:12)

它们都只是参数声明。这两个片段是等效的。这两种语法都可以使用,但是支持的形式允许在变量名称中不合法的字符。从PowerShell 3.0语言规范:

  

有两种编写变量名的方法:一个括号变量名,以$开头,后跟一个或多个几乎任意字符的大括号分隔集;还有一个普通变量名称,它也以$开头,后跟一个比限制变量名允许的限制性更强的集合中的一个或多个字符集。每个普通变量名都可以使用相应的括号变量名来表示。

来自about_Variables

  

要创建或显示包含空格或特殊字符的变量名称,请将变量名称括在大括号中。这会指示Windows PowerShell按字面解释变量名称中的字符。

     

例如,以下命令创建并显示名为“save-items”的变量。

C:\PS> ${save-items} = "a", "b", "c" 
C:\PS> ${save-items} 
a 
b 
c

答案 1 :(得分:9)

@ MikeZ的答案在解释问题中的示例时非常正确,但就解决问题 title 而言,实际上还有更多要说的! ${}表示法实际上有两个用法;第二个是PowerShell的隐藏宝石:

bracket notation examples

也就是说,如果您提供驱动器限定路径,则可以使用此括号表示法执行文件I / O操作,如MSDN页面Provider Paths中所定义。

(上图来自Complete Guide to PowerShell Punctuation,一页免费下载的挂图,附在我最近在Simple-Talk.com上的文章中。)

答案 2 :(得分:2)

它们是等价的。它只是一种声明变量的替代方法。

如果您在正常变量中使用了非法字符,则可以使用大括号(将其视为"转义"变量名称)。

答案 3 :(得分:1)

还有另外一种用法。

一个变量名可能像var1,var2,var11,var12,var101等。 不管这是否是理想的变量命名,它都可以。

使用方括号可以准确确定要使用的内容: $var11的分配可能是模棱两可的,使用${var1}1${var11}不会出错。