편집 참고 사항
중요하다
Windows PowerShell 언어 사양 3.0 2012년 12월에 게시되었으며 Windows PowerShell 3.0을 기반으로 합니다. 이 사양은 PowerShell의 현재 상태를 반영하지 않습니다. 현재 상태를 반영하도록 이 설명서를 업데이트할 계획은 없습니다. 이 설명서는 기록 참조를 위해 여기에 제공됩니다.
사양 문서는 Microsoft 다운로드 센터에서 Microsoft Word 문서로 사용할 수 있습니다. https://www.microsoft.com/download/details.aspx?id=36389 해당 Word 문서는 Microsoft Learn에서 프레젠테이션용으로 변환되었습니다. 변환하는 동안 Docs 플랫폼의 서식을 수용하기 위해 일부 편집 변경이 이루어졌습니다. 일부 오타 및 사소한 오류가 수정되었습니다.
9.1 소개
PowerShell은 하나 이상의 차원으로 구성된 배열을 지원하며, 각 차원에는 0개 이상의 요소가포함될 수 있습니다. 차원 내에서 요소는 0부터 오름차순으로 번호가 매겨집니다.
배열 첨자 연산자 [](§7.1.4)를 통해 개별 요소에 액세스할 수 있습니다. 배열의 차원 수를 랭크라고 합니다.
요소는 배열 형식을 포함한 모든 형식의 값을 포함할 수 있습니다. 값이 배열 유형인 하나 이상의 요소를 가진 배열을 톱니형 배열이라고 합니다. 다차원 배열 여러 차원이 있습니다. 이 경우 차원의 각 행에 있는 요소 수는 동일합니다. 가변 배열의 요소는 다차원 배열을 포함할 수 있으며 그 반대의 경우도 마찬가지입니다.
다차원 배열은 행 주 순서로 저장됩니다. 배열의 요소 수는 해당 배열의 길이라고 하며, 배열이 생성될 때 고정됩니다. 따라서 길이가 N인 1차원 배열 A의 요소는 표현식을 사용하여 접근할 수 있습니다(즉, 첨자 지정). 2차원 배열 B에는 M 행과 각 행에 N 열이 있으며, 이러한 요소들은 B[0,0], B[0,1], ..., B[0,N-1], B[1,0], B[1,1], ..., B[1,N-1], ..., B[M-1,0], B[M-1,1], ..., B[M-1,N-1]표현식을 사용하여 접근할 수 있습니다.
3개 이상의 차원이 있는 배열의 경우도 마찬가지입니다.
기본적으로 배열은 다형
$items = 10,"blue",12.54e3,16.30D # 1-D array of length 4
$items[1] = -2.345
$items[2] = "green"
$a = New-Object 'object[,]' 2,2 # 2-D array of length 4
$a[0,0] = 10
$a[0,1] = $false
$a[1,0] = "red"
$a[1,1] = $null
1차원 배열은 type[]형식을 가지며, 2차원 배열은 type[,]형식을 갖고, 3차원 배열은 type[,,]형식을 가집니다. 여기에서 형식는 제약이 없는 형식 배열의 객체이거나, 제한된 배열의 경우에는 제한된 형식을 가집니다 (§9.4).
모든 배열 형식은 배열 형식(§4.3.2)에서 파생됩니다.
9.2 배열 만들기
배열은 배열 생성 식을 통해 생성되며, 단항 쉼표 연산자(§7.2.1), 배열 식(§7.1.7), 이진 쉼표 연산자(§7.3), 범위 연산자(§7.4) 또는 New-Object cmdlet을 사용합니다.
다음은 배열 만들기 및 사용의 몇 가지 예입니다.
$values = 10, 20, 30
for ($i = 0; $i -lt $values.Length; ++$i) {
"`$values[$i] = $($values[$i])"
}
$x = , 10 # x refers to an array of length 1
$x = @(10) # x refers to an array of length 1
$x = @() # x refers to an array of length 0
$a = New-Object 'object[,]' 2, 2 # create a 2x2 array of anything
$a[0, 0] = 10 # set to an int value
$a[0, 1] = $false # set to a boolean value
$a[1, 0] = "red" # set to a string value
$a[1, 1] = 10.50D # set to a decimal value
foreach ($e in $a) { # enumerate over the whole array
$e
}
파이프라인에 기록되는 내용은 다음과 같습니다.
$values[0] = 10
$values[1] = 20
$values[2] = 30
10
False
red
10.50
명시적으로 초기화되지 않은 요소의 기본 초기 값은 해당 요소 형식(즉, $false, 0 또는 $null)의 기본값입니다.
9.3 배열 연결
임의 형식과 길이의 배열은 + 및 += 연산자를 통해 연결할 수 있으며, 이로 인해 제약이 없는 1차원 배열이 새로 만들어질 수 있습니다. 기존 배열은 변경되지 않습니다. 자세한 내용은 §7.7.3을 참조하고, 제한된 형식의 배열에 추가하는 방법에 대한 논의는 §9.4을 참조하십시오.
9.4 요소 형식 제한
배열 형식 캐스트를 사용하여 배열 생성 식의 접두사를 지정하여 형식이 제한되도록 1차원 배열을 만들 수 있습니다. 예를 들어
$a = [int[]](1,2,3,4) # constrained to int
$a[1] = "abc" # implementation-defined behavior
$a += 1.23 # new array is unconstrained
다차원 배열을 만들기 위한 구문에는 형식의 사양이 필요하며 해당 형식은 해당 배열의 제약 조건 형식이 됩니다. 그러나 object[]형식을 지정하면, 어떤 형식의 값도 해당 형식의 배열 요소에 할당될 수 있기 때문에 정말로 제약 조건이 없습니다.
두 배열(§7.7.3)을 연결하면 두 배열이 동일한 형식으로 제한되더라도 항상 새로운 배열이 제한되지 않습니다. 예를 들어
$a = [int[]](1,2,3) # constrained to int
$b = [int[]](10,20) # constrained to int
$c = $a + $b # constraint not preserved
$c = [int[]]($a + $b) # result explicitly constrained to int
9.5 배열은 참조 타입입니다
배열 형식은 참조 형식이므로 배열을 지정하는 변수를 만들어 모든 순위, 길이 및 요소 형식의 배열을 참조할 수 있습니다. 예를 들어
$a = 10,20 # $a refers to an array of length 2
$a = 10,20,30 # $a refers to a different array, of length 3
$a = "red",10.6 # $a refers to a different array, of length 2
$a = New-Object 'int[,]' 2,3 # $a refers to an array of rank 2
배열 할당에는 단순 복사본이 포함됩니다. 즉, 할당된 변수가 동일한 배열을 참조하며 배열의 복사본이 만들어지지 않습니다. 예를 들어
$a = 10,20,30
">$a<"
$b = $a # make $b refer to the same array as $a
">$b<"
$a[0] = 6 # change value of [0] via $a
">$a<"
">$b<" # change is reflected in $b
$b += 40 # make $b refer to a new array
$a[0] = 8 # change value of [0] via $a
">$a<"
">$b<" # change is not reflected in $b
파이프라인에 기록되는 내용은 다음과 같습니다.
>10 20 30<
>10 20 30<
>6 20 30<
>6 20 30<
>8 20 30<
>6 20 30 40<
배열의 구성 요소로서의 배열 9.6
배열의 모든 요소는 자체 배열일 수 있습니다. 예를 들어
$colors = "red", "blue", "green"
$list = $colors, (,7), (1.2, "yes") # parens in (,7) are redundant; they
# are intended to aid readability
"`$list refers to an array of length $($list.Length)"
">$($list[1][0])<"
">$($list[2][1])<"
파이프라인에 기록되는 내용은 다음과 같습니다.
$list refers to an array of length 3
>7<
>yes<
$list[1] 표시된 대로 $list[1][0]통해 액세스되는 1개 요소인 정수 7의 배열을 참조합니다. 이를 다음과 미묘하게 다른 사례와 비교합니다.
$list = $colors, 7, (1.2, "yes") # 7 has no prefix comma
">$($list[1])<"
여기서 $list[1]$list[1]통해 액세스되는 스칼라인 정수 7을 참조합니다.
다음 예제를 고려해 보세요.
$x = [string[]]("red","green")
$y = 12.5, $true, "blue"
$a = New-Object 'object[,]' 2,2
$a[0,0] = $x # element is an array of 2 strings
$a[0,1] = 20 # element is an int
$a[1,0] = $y # element is an array of 3 objects
$a[1,1] = [int[]](92,93) # element is an array of 2 ints
9.7 음의 첨자
이 내용은 §7.1.4.1설명합니다.
9.8 경계 확인
이 내용은 §7.1.4.1설명합니다.
9.9 배열 슬라이스
배열 조각은 컬렉션에서 0개 이상의 요소를 복사하여 구성된 제약 없는 1차원 배열입니다. 배열 조각은 서브스크립트 연산자 [](§7.1.4.5)을 통해 만들어집니다.
9.10 배열 복사
[array]::Copy메서드를 사용하여 한 배열에서 다른 배열로 연속된 요소 집합을 복사할 수 있습니다. 예를 들어
$a = [int[]](10,20,30)
$b = [int[]](0,1,2,3,4,5)
[array]::Copy($a, $b, 2) # $a[0]->$b[0],
$a[1]->$b[1]
[array]::Copy($a, 1, $b, 3, 2) # $a[1]->$b[3],
$a[2]->$b[4]
9.11 배열 순회
첨자 연산자를 통해서 배열의 각 요소에 접근하며 반복할 수 있지만, foreach 문을 사용하여 해당 배열의 요소를 열거할 수도 있습니다. 다차원 배열의 경우 요소는 행 주 순서로 처리됩니다. 예를 들어
$a = 10, 53, 16, -43
foreach ($elem in $a) {
# do something with element via $elem
}
foreach ($elem in -5..5) {
# do something with element via $elem
}
$a = New-Object 'int[,]' 3, 2
foreach ($elem in $a) {
# do something with element via $elem
}
9.12 다차원 배열 평면화
다차원 배열에 대한 일부 작업(예: 복제(§7.6.3) 및 연결(§7.7.3))을 사용하려면 배열을 평면화해야; 즉, 제약 없는 형식의 1차원 배열로 바꿔야 합니다. 결과 배열은 행 주 순서의 모든 요소를 사용합니다.
다음 예제를 고려하세요.
$a = "red",$true
$b = (New-Object 'int[,]' 2,2)
$b[0,0] = 10
$b[0,1] = 20
$b[1,0] = 30
$b[1,1] = 40
$c = $a + $b
$c 지정된 배열에는 "red", $true, 10, 20, 30 및 40 요소가 포함됩니다.
PowerShell