在 PowerShell 中使用 @ 符號

Rohan Timalsina 2023年1月30日
  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
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