在 PowerShell 中使用 @ 符号

Rohan Timalsina 2023年1月30日 2022年5月16日
  1. 在 PowerShell 中使用 @ 符号创建数组
  2. 在 PowerShell 中使用 @ 符号创建哈希表
  3. 在 PowerShell 中为 Here-Strings 使用 @ 符号
  4. 在 PowerShell 中使用@符号对数组进行拼接
  5. 使用@符号在 PowerShell 中用哈希表进行拼接
在 PowerShell 中使用 @ 符号

你可能已经看到 PowerShell 中使用的不同符号,例如 @?|$%=。所有这些符号在命令中都有它们的用途。

本教程将向你展示@符号在 PowerShell 中的各种用法。

在 PowerShell 中使用 @ 符号创建数组

数组子表达式运算符 @() 在 PowerShell 中创建并初始化一个数组。

$array = @('Apple', 'Banana', 'Mango')
$array

输出:

Apple
Banana
Mango

你可以使用 GetType 方法来获取变量的数据类型。

$array.GetType()

输出:

IsPublic  IsSerial  Name                                     BaseType
--------  --------  ----                                     --------
True      True      Object[]                                 System.Array

你可以使用此运算符创建一个数组零个或一个对象。如果括号中没有提供任何值,它将创建一个空数组。

$data = @()

在 PowerShell 中使用 @ 符号创建哈希表

哈希表是一种紧凑的数据结构,它存储一个或多个成对的键和值。它也称为字典或关联数组。

在 PowerShell 中创建哈希表的语法以 @ 符号开头。键和值包含在 {} 括号中。

下面的示例创建一个包含三个键和值的哈希表。

$hash = @{Name = "Sam"; Age = 21; Address = "Nepal"}
$hash

输出:

Name                           Value
----                           -----
Name                           Sam
Age                            21
Address                        Nepal

你可以使用 GetType() 方法检查数据类型。

$hash.GetType()

输出:

IsPublic  IsSerial  Name                                     BaseType
--------  --------  ----                                     --------
True      True      Hashtable                                System.Object

如果括号中没有提供键和值,将创建一个空的哈希表。

$hash = @{}

在 PowerShell 中为 Here-Strings 使用 @ 符号

@ 符号的另一个重要用途是在 PowerShell 中定义此处的字符串。引号在此处字符串中按字面意思解释。

此处字符串可以是单引号或双引号字符串,每端都有@。它可以有多行文本。

Here-string 带双引号:

@"
Press "Enter" to continue...
Press "X" to quit.
"@

输出:

Press "Enter" to continue...
Press "X" to quit.

此处字符串包含@" "@ 之间的所有文本。

Here-带单引号的字符串:

@'
My name is $name.
'@

输出:

My name is $name.

在单引号 here-strings 中,变量按字面意思解释并打印在输出中,但不是在双引号 here-strings 中。

在 PowerShell 中使用@符号对数组进行拼接

你可以在命令中使用@符号对数组进行拼接。 @ 符号可以使用数组来显示不需要参数名称的位置参数的值。

我们将比较 Copy-Item cmdlet 的两个示例以将 test.txt 复制到同一目录中的 test2.txt

以下示例使用省略了参数名称的基本格式。

-WhatIf 参数显示 cmdlet 运行时会发生什么。cmdlet 未运行。

Copy-Item "test.txt" "test2.txt" -WhatIf

输出:

What if: Performing the operation "Copy File" on target "Item: C:\Users\rhntm\test.txt Destination: C:\Users\rhntm\test2.txt".

现在,让我们使用数组喷射执行相同的操作。此示例在 $ArrayArguments 变量中创建参数值数组。

另一个命令通过将命令中的 $ 符号替换为@ 来使用 $ArrayArguments 变量。

$ArrayArguments = "test.txt", "test2.txt"
Copy-Item @ArrayArguments -WhatIf

输出:

What if: Performing the operation "Copy File" on target "Item: C:\Users\rhntm\test.txt Destination: C:\Users\rhntm\test2.txt".

使用@符号在 PowerShell 中用哈希表进行拼接

同样地,你可以使用@符号来进行哈希表的拼接。

第一个命令创建一个哈希表,以将参数名称和参数值对存储在 $HashArguments 变量中。第二条命令在拼接中使用 $HashArguments 变量,将 $ 符号替换为@

$HashArguments = @{
    Path = "test.txt"
    Destination = "test2.txt"
    WhatIf = $true
}
Copy-Item @HashArguments

你可以为 -WhatIf 参数提供值 $true$false

输出:

What if: Performing the operation "Copy File" on target "Item: C:\Users\rhntm\test.txt Destination: C:\Users\rhntm\test2.txt".

正如你所看到的,它执行了与哈希表拼接相同的操作。

Rohan Timalsina avatar Rohan Timalsina avatar

Rohan is a learner, problem solver, and web developer. He loves to write and share his understanding.

LinkedIn Website