什么是@参数?

时间:2015-06-19 11:14:37

标签: powershell

在PowerShell中,很少有程序以@'开头,以'@结尾,但是当我键入@'并在PowerShell提示符下按Enter键时会抛出错误。任何人都可以解释我怎么能这样做?

2 个答案:

答案 0 :(得分:6)

@'...'@@"..."@是" Here Strings" (记录在about_quoting_rules中):

  

下面-STRINGS

     

here-strings的引用规则略有不同。

     

here-string是单引号或双引号的字符串       哪个引号按字面解释。 here-string可以       跨越多行。解释了here-string中的所有行       作为字符串,即使它们没有用引号括起来。

     

与常规字符串一样,变量将被其值替换       双引号 - 字符串。在单引号中的字符串,变量       没有被他们的价值取代。

     

您可以将here-strings用于任何文本,但它们尤其如此       适用于以下类型的文本:

-- Text that contains literal quotation marks
-- Multiple lines of text, such as the text in an HTML or XML document
-- The Help text for a script or function
     

here-string可以具有以下格式之一,其中       表示在添加时添加的换行符或换行符隐藏字符       按ENTER键。

     

双引号:

   @"<Enter>
    <string> [string] ...<Enter>
    "@
     

单引号:

   @'<Enter>
    <string> [string] ...<Enter>
    '@
     

在任何一种格式中,右引号必须是第一个字符       在线。

     

here-string包含两个隐藏字符之间的所有文本。       在here-string中,所有引号都按字面解释。       例如:

   @"
    For help, type "get-help"
    "@
     

此命令的输出为:

   For help, type "get-help"
     

使用here-string可以简化在命令中使用字符串。对于       例如:

   @"
    Use a quotation mark (') to begin a string.
    "@
     

此命令的输出为:

   Use a quotation mark (') to begin a string.
     

在单引号here-strings中,变量按字面解释       完全转载。例如:

   @'
    The $profile variable contains the path
    of your Windows PowerShell profile.
    '@
     

此命令的输出为:

   The $profile variable contains the path
    of your Windows PowerShell profile.
     

在双引号here-strings中,变量被其值替换。       例如:

   @" 
    Even if you have not created a profile,
    the path of the profile file is:
    $profile.
    "@
     

此命令的输出为:

   Even if you have not created a profile,
    the path of the profile file is:
    C:\Users\User01\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1.
     

Here-字符串通常用于指定多行       一个变量。例如,以下here-string指定一个       XML页面到$ page变量。

   $page = [XML] @"
    <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10"
    xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" 
    xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10">
    <command:details>
            <command:name>
                   Format-Table
            </command:name>
            <maml:description>
                <maml:para>Formats the output as a table.</maml:para>
            </maml:description>
            <command:verb>format</command:verb>
            <command:noun>table</command:noun>
            <dev:version></dev:version>
    </command:details>
    ...
    </command:command>
    "@
     

Here-字符串也是一种方便的输入格式       ConvertFrom-StringData cmdlet,它将here-strings转换为hash       表。有关更多信息,请参阅ConvertFrom-StringData。

答案 1 :(得分:2)

@''@标记Here-String的开头和结尾。在PowerShell控制台中键入@'然后按 Enter 通常会为您提供行继续提示(>>):

PS C:> @'
>> _

如果您收到错误,则很可能没有输入单个(或双重)报价,而是输入正向或反向或某种印刷报价。如果是这样的话,你应该得到一个&#34;无法识别的令牌&#34;像这样的错误:

PS C:\> 
At line:1 char:1
+ @´
+ ~
Unrecognized token in source text.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : UnrecognizedToken