Biểu tượng “@” có chức năng gì trong Powershell?


112

Tôi đã thấy biểu tượng @ được sử dụng trong PowerShell để khởi tạo mảng. Chính xác thì biểu tượng @ biểu thị điều gì và tôi có thể đọc thêm về nó ở đâu?

Câu trả lời:


81

PowerShell thực sự sẽ coi mọi danh sách được phân tách bằng dấu phẩy là một mảng:

"server1","server2"

Vì vậy, @ là tùy chọn trong những trường hợp đó. Tuy nhiên, đối với các mảng kết hợp, @ là bắt buộc:

@{"Key"="Value";"Key2"="Value2"}

Về mặt chính thức, @ là "toán tử mảng". Bạn có thể đọc thêm về nó trong tài liệu cài đặt cùng với PowerShell hoặc trong một cuốn sách như "Windows PowerShell: TFM" mà tôi là đồng tác giả.


12
Hãy nhớ xem câu trả lời của Jeffrey Snover bên dưới ... @ không chỉ là một định danh mảng.
Eric Schoonover

115

Trong PowerShell V2, @ cũng là toán tử Splat .

PS> # First use it to create a hashtable of parameters:
PS> $params = @{path = "c:\temp"; Recurse= $true}
PS> # Then use it to SPLAT the parameters - which is to say to expand a hash table 
PS> # into a set of command line parameters.
PS> dir @params
PS> # That was the equivalent of:
PS> dir -Path c:\temp -Recurse:$true

1
Đây là những gì tôi đang tìm kiếm: toán tử này được sử dụng trong ngữ cảnh splat trong các tập lệnh triển khai Nhóm tài nguyên Azure.
Alex Marshall

57

Mặc dù các câu trả lời ở trên cung cấp hầu hết câu trả lời nhưng rất hữu ích - ngay cả khi câu hỏi đã muộn - để cung cấp câu trả lời đầy đủ, với sự dí dỏm:

Biểu thức con mảng (xem about_arrays )

Buộc giá trị là một mảng, ngay cả khi một đơn hoặc một null, ví dụ: $a = @(ps | where name -like 'foo')

Trình khởi tạo băm (xem about_hash_tables )

Khởi tạo bảng băm với các cặp khóa-giá trị, ví dụ: $HashArguments = @{ Path = "test.txt"; Destination = "test2.txt"; WhatIf = $true }

Splatting (xem about_splatting )

Hãy cho phép bạn gọi một lệnh ghép ngắn với các tham số từ một mảng hoặc một bảng băm thay vì các tham số được liệt kê riêng lẻ tùy chỉnh hơn, ví dụ: sử dụng bảng băm ngay trên, Copy-Item @HashArguments

Đây chuỗi (xem about_quoting_rules )

Hãy để bạn tạo chuỗi với dấu ngoặc kép được nhúng dễ dàng, thường được sử dụng cho chuỗi nhiều dòng, ví dụ:

$data = @"
line one
line two
something "quoted" here
"@

Vì loại câu hỏi này ( ký hiệu 'x' có nghĩa là gì trong PowerShell? ) Ở đây rất phổ biến trên StackOverflow cũng như trong nhiều nhận xét của độc giả, tôi đã tổng hợp một từ vựng về dấu câu PowerShell, vừa được xuất bản trên Simple-Talk.com. Đọc tất cả về @ cũng như% và # và $ _ và? và hơn thế nữa tại Hướng dẫn đầy đủ về Dấu câu PowerShell . Đính kèm với bài viết là bảng vẽ tường này cung cấp cho bạn mọi thứ trên một trang tính: nhập mô tả hình ảnh ở đây


Hướng dẫn rất kỹ về tất cả các cách sử dụng của @. Tôi đến đây để tìm chuỗi đây. Cảm ơn bạn!
Nixphoe

27

Bạn cũng có thể bao bọc đầu ra của một lệnh ghép ngắn (hoặc đường ống dẫn) @()để đảm bảo rằng những gì bạn nhận lại là một mảng chứ không phải một mục duy nhất.

Ví dụ: dir thường trả về một danh sách, nhưng tùy thuộc vào các tùy chọn, nó có thể trả về một đối tượng duy nhất. Nếu bạn đang lập kế hoạch lặp lại các kết quả với một đối tượng foreach, bạn cần đảm bảo rằng bạn lấy lại danh sách. Đây là một ví dụ giả định:

$results = @( dir c:\autoexec.bat)

Một điều nữa ... một mảng trống (giống như để khởi tạo một biến) được ký hiệu @().


[mảng] $ a cú pháp có phần rõ ràng hơn, trực quan hơn, nhưng mẹo hay.
Don Jones

7

Nhà điều hành Splatting

Để tạo mảng, chúng ta tạo một biến và gán mảng. Mảng được ghi chú bằng ký hiệu "@". Hãy cùng thảo luận ở trên và sử dụng một mảng để kết nối với nhiều máy tính từ xa:

$strComputers = @("Server1", "Server2", "Server3")<enter>

Chúng được sử dụng cho mảng và hàm băm.

Hướng dẫn PowerShell 7: Tích lũy, thu hồi và sửa đổi dữ liệu

Array Literals Trong PowerShell

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.