Powershell – Arrays (배열)

Powershell 의 모든 Variable(변수)는 .NET의 Type을 가지는데 지금 부터 설명할 Array는 Powershell에서 기본 값으로 System.Object[] 타입으로 생성된다.

배열 선언

간단한 Array부터 만들어 보자.

$Arr = "A", "B", "C"
$Arr  # A B C

다음과 같이 출력 될 것이다.

A
B
C

원소가 3개인 Object 배열 (Object[]) 이 생성되었다. 확인을 위해 다음을 하나씩 입력 해 보자.

$Arr.GetType()	# Object[]
$Arr.Count		# 3
$Arr.Length		# 3
$Arr[0]			# A
$Arr[2]			# C
Get-Member -InputObject $Arr

$Arr 개체가 타입이 Object[] 즉 배열로 생성이 되었고, Property들이 정상 작동 한다.

Powershell 에서 배열은 @( ) 연산자 를 이용하여 선언 할 수도 있다. 다음 선언 되는 2개의 변수는 동일 한 것이다(Compare-Object 기준).

$Arr1 = @("A1", "A2", "A3")
$Arr2 = "A1", "A2", "A3"
$Arr1.GetType()
$Arr2.GetType()

Compare-Object $Arr1 $Arr2


인덱스를 이용한 원소 접근

[] 또는 메서드와 인덱스를 통해 원소에 접근 할 수 있다.
인덱스는 0 부터 할당되어 원소가 3개인 경우 인덱스는 0 ~ 2 이다.

다음은 인덱스를 이용해 원소에 접근하고 값을 변경 한다.

$Arr = "A", "B", "C"
$Arr.GetValue(1)	# B
$Arr[1] = "X"		# 2 번째 원소의 값을 X로 변경
$Arr.Get(1)			# X
$Arr.Set(0, "Y")	# 1 번째 원소의 값을 Y로 변경
$Arr[0]				# Y


배열 순회

배열을 순회하는 방법에는 여러가지가 있다. 익숙한 for문과 인덱스를 이용하는 방법 이외에도 C#의 그것과 유사한 foreach 문, 그리고 Powershell 의 개체 파이프라인을 이용하는 방법이 있다. 다음 예제들은 모두 같은 출력을 가진다.

$Numbers = @( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 )
for ($index = 0; $index -lt $Numbers.Length; $index++)
{
	$Numbers[$index] + 1
}
foreach ($item in $Numbers)
{
	$item + 1
}
$Numbers | ForEach-Object { $_ + 1 }


배열 순회시 주의 사항

foreach 문이나 Pipeline 의 출력을 받는 ForEach-Object cmdlet 내부에서 배열의 원소값을 변경하는 실수를 범하지 말자. 이 것들은 iteration variable 이기 때문에 실제 원소들이 변경 되지 않는다.

$Numbers = @( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 )

foreach ($item in $Numbers)
{
	$item = 0
}

$Numbers  # 변함 없이 0 1 2 3 4 5 6 7 8 9
$Numbers = @( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 )

$Numbers | ForEach-Object { $_++ }

$Numbers  # 변함 없이 0 1 2 3 4 5 6 7 8 9

순회 하면서 원소를 변경 할 때에는 for 문과 index를 사용 하는 것이 방법중 하나가 될 수 있다.

$Numbers = @( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 )

for ($index = 0; $index -lt $Numbers.Length; $index++)
{
	$Numbers[$index] ++
}

$Numbers  # 변경됨 : 1 2 3 4 5 6 7 8 9 10


배열 연산자

Powershell 에서의 배열은 몇가지 연산자를 지원 한다. 실제 .NET Object[] 에서는 지원하지 않는 기능인데 Powershell 에서는 편리하게 사용 할 수 있다.

+ : 하나의 원소를 또는 다른 배열을 합친 새로운 배열을 리턴한다.

$Alphabet = "Alpha", "Bravo"

$Result = $Alphabet + "Charlie"
$Result  # "Alpha", "Bravo", "Charlie"

$Result = $Alphabet + @("Delta", "Echo")
$Result  # "Alpha", "Bravo", "Delta", "Echo"

+= : 기존의 배열에 하나의 원소 또는 다른 배열을 추가한다. List 개체의 .Add() , .AddRange() 와 비슷 하다.

$Alphabet = "Alpha", "Bravo"

$Alphabet += "Charlie"
$Alphabet  # "Alpha", "Bravo", "Charlie"

$Alphabet += @("Delta", "Echo")
$Alphabet  # "Alpha", "Bravo", "Charlie", "Delta", "Echo"

* : 곱한 값 만큼 반복되는 배열을 리턴한다. (int 값만 가능하다.)

$Alphabet = "Alpha", "Bravo"

$Result = $Alphabet * 2
$Result  # "Alpha", "Bravo", "Alpha", "Bravo"

*= : 기존의 배열에 곱한 값 만큼 반복되는 배열(기존의 배열 포함)을 추가 시킨다. (int 값만 가능하다.)

$Alphabet = "Alpha", "Bravo"

$Alphabet *= 2
$Alphabet  # "Alpha", "Bravo", "Alpha", "Bravo"

2 thoughts on “Powershell – Arrays (배열)

  1. mirth81

    야, 왜자꾸 파워쉘 이딴거 공부하냐 🙂
    열심히 하는거 보니 보기 좋네.

  2. 쉘 언어 하나정도는 공부 해야 될꺼 같아서요 ^^ .
    서버 관리나 개발 작업 하는데 사용하니까 도움이 많이 되는거 같아요.

답글 남기기

이메일 주소는 공개되지 않습니다.

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> 

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.