about_Assignment_Operators
업데이트 날짜: 2014년 5월
적용 대상: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0
여기에 소개를 삽입합니다.
항목
about_assignment_operators
간단한 설명
변수에 값을 할당하는 연산자를 사용하는 방법에 대해 설명합니다.
자세한 설명
대입 연산자는 하나 이상의 값을 변수에 할당합니다. 할당하기 전에 값에 대해 수식 연산을 수행할 수 있습니다.
Windows PowerShell®에서는 다음 대입 연산자를 지원합니다.
Operator Description
------- -----------
= Sets the value of a variable to the specified value.
+= Increases the value of a variable by the specified value, or
appends the specified value to the existing value.
-= Decreases the value of a variable by the specified value.
*= Multiplies the value of a variable by the specified value, or
appends the specified value to the existing value.
/= Divides the value of a variable by the specified value.
%= Divides the value of a variable by the specified value and
then assigns the remainder (modulus) to the variable.
++ Increases the value of a variable, assignable property, or
array element by 1.
-- Decreases the value of a variable, assignable property, or
array element by 1.
구문
대입 연산자의 구문은 다음과 같습니다.
<assignable-expression> <assignment-operator> <value>
대입식에는 변수와 속성이 있습니다. 값은 단일 값, 값 배열, 명령, 식 또는 문이 될 수 있습니다.
증가 및 감소 연산자는 단항 연산자입니다. 각각에는 접두사 및 접미사 버전이 있습니다.
<assignable-expression><operator>
<operator><assignable-expression>
대입식은 숫자이거나 숫자로 변환할 수 있어야 합니다.
할당 값
변수는 값을 저장하는 명명된 메모리 공간입니다. 대입 연산자(=)를 사용하여 변수에 값을 저장합니다. 새 값은 변수의 기존 값을 대체하거나 새 값을 기존 값에 추가할 수 있습니다.
기본 대입 연산자는 등호(=)(ASCII 61)입니다. 예를 들어 다음 명령은 Windows PowerShell 값을 $MyShell 변수 값을 할당합니다.
$MyShell = "Windows PowerShell"
값을 Windows PowerShell의 변수에 할당하면, 변수가 존재하지 않은 경우 변수가 만들어집니다. 예를 들어 다음 두 대입문 중 첫 번째는 $a 변수를 만들고 값 6을 $a에 할당합니다. 두 번째 대입문은 값 12를 $a에 할당합니다. 첫 번째 문은 새 변수를 만듭니다. 두 번째 문은 다음과 같이 값만 변경합니다.
$a = 6
$a = 12
변수를 캐스팅하지 않은 경우 Windows PowerShell의 변수는 특정 데이터 유형을 가지지 않습니다. 변수에 한 개의 개체만 있는 경우 변수는 해당 개체의 데이터 유형을 취합니다. 변수에 개체 컬렉션이 있는 경우 변수는 System.Object 데이터 유형을 가집니다. 따라서 개체 유형을 컬렉션을 할당할 수 있습니다. 다음 예제에서는 프로세스 개체, 서비스 개체, 문자열, 정수를 오류 발생 없이 변수에 추가할 수 있습니다.
$a = get-process
$a += get-service
$a += "string"
$a += 12
대입 연산자(=)가 파이프라인 연산자(|)보다 우선 순위가 낮기 때문에 명령 파이프라인의 결과를 변수에 할당하는 데 괄호가 필요하지 않습니다. 예를 들어 다음 명령은 컴퓨터의 서비스를 정렬한 다음 정렬된 서비스를 $a variable에 할당합니다.
$a = get-service | sort name
또한 다음 예제와 같이 문에서 만들어진 값을 변수에 할당할 수 있습니다.
$a = if ($b -lt 0) { 0 } else { $b }
이 예제는 값 $b가 0보다 적은 경우 0을 $a 변수에 할당합니다. 값 $b가 0보다 적지 않은 경우 값 $b를 $a에 할당합니다.
대입 연산자(=)
대입 연산자(=)는 값을 변수에 할당합니다. 변수가 이미 값을 가진 경우 대입 연산자(=)는 경고 없이 값을 대체합니다.
다음 문은 정수 값 6을 $a 변수에 할당합니다.
$a = 6
문자열 값을 변수에 할당하려면 다음과 같이 문자열 값을 따옴표로 묶습니다.
$a = "baseball"
배열(여러 개의 값)을 변수에 할당하려면 다음과 같이 쉼표로 값을 구분합니다.
$a = "apple", "orange", "lemon", "grape"
해시 테이블을 변수에 할당하려면 Windows PowerShell에서 표준 해시 테이블 표기법을 사용합니다. 세미콜론(;)로 구분되고 중괄호({ })로 묶여 있는 키/값 쌍 다음에 기호(@)를 입력합니다. 예를 들어 해시 테이블을 $a 변수에 할당하려면 다음을 입력합니다.
$a = @{one=1; two=2; three=3}
16진수 값을 변수에 할당하려면 값 앞에 "0x"을 추가합니다. Windows PowerShell은(는) 16진수(0x10)를 10진수(이 경우, 16)로 변환하고 해당 값을 $a 변수에 할당합니다. 예를 들어 값 0x10을 $a 변수에 할당하려면 다음을 입력합니다.
$a = 0x10
지수 값을 변수에 할당하려면 제곱근 수, 문자 "e", 10의 배수를 나타내는 수를 입력합니다. 예를 들어 값 3.1415의 1,000제곱을 $a 변수에 할당하려면 다음을 입력합니다.
$a = 3.1415e3
또한 Windows PowerShell은(는) 킬로바이트(KB), 메가바이트(MB), 기가바이트(GB)를 바이트로 변환할 수 있습니다. 예를 들어 값 10킬로바이트를 $a 변수에 할당하려면 다음을 입력합니다.
$a = 10kb
더하기 대입 연산자(+=)
더하기 대입 연산자(+=)는 변수 값을 더하거나 지정된 값을 기존 값에 추가합니다. 작업은 변수가 숫자인지 문자열 형식인지 그리고 변수에 단일 값(스칼라)을 포함하는지 여러 개의 값(컬렉션)을 포함하는지에 따라 달라집니다.
+= 연산자는 두 개의 연산자가 결합되어 있습니다. 먼저 더하고, 그런 다음 할당합니다. 따라서 다음 문과 동일합니다.
$a += 2
$a = ($a + 2)
변수에 단일 숫자 값이 있는 경우 += 연산자는 연산자의 오른쪽에 있는 양만큼 기존 값을 증가시킵니다. 그런 다음 연산자는 결과 값을 변수에 할당합니다. 다음 예제에서는 += 연산자를 사용하여 변수 값을 증가시키는 방법을 보여줍니다.
C:\PS> $a = 4
C:\PS> $a += 2
C:\PS> $a
6
변수 값이 문자열인 경우 다음과 같이 연산자의 오른쪽에 있는 값이 문자열에 추가됩니다.
C:\PS> $a = "Windows"
C:\PS> $a += " PowerShell"
C:\PS> $a
Windows PowerShell
변수 값이 배열인 경우 += 연산자는 연산자의 오른쪽에 있는 값을 배열에 추가합니다. 캐스팅함으로써 명시적으로 배열을 입력하지 않은 경우 다음과 같이 값 유형을 배열에 추가할 수 있습니다.
C:\PS> $a = 1,2,3
C:\PS> $a += 2
C:\PS> $a
1
2
3
2
C:\PS> $a += "String"
C:\PS> $a
1
2
3
2
String
변수 값이 해시 테이블인 경우 += 연산자는 연산자의 오른쪽에 있는 값을 해시 테이블에 추가합니다. 그러나 해시 테이블에 추가할 수 있는 유형만 또 다른 해시 테이블이 될 수 있기 때문에 다른 모든 할당은 실패합니다.
예를 들어 다음 명령은 해시 테이블을 $a 변수에 할당합니다. 그런 다음 += 연산자를 사용하여 또 다른 해시 테이블을 기존 해시 테이블에 추가함으로써, 새 키/값 쌍을 기존 해시 테이블에 효과적으로 추가합니다. 출력에서 나타난 대로 이 명령은 성공합니다.
C:\PS> $a = @{a = 1; b = 2; c = 3}
C:\PS> $a += @{mode = "write"}
C:\PS> $a
Name Value
---- -----
a 1
b 2
mode write
c 3
다음 명령으로 정수(1)을 $a 변수의 해시 테이블에 추가하려 합니다. 이 명령은 실패합니다.
C:\PS> $a = @{a = 1; b = 2; c = 3}
C:\PS> $a += 1
You can add another hash table only to a hash table.
At line:1 char:6
+ $a += <<<< 1
빼기 대입 연산자(-=)
빼기 대입 연산자(-=)는 연산자의 오른쪽에 지정된 값만큼 변수 값을 감소시킵니다. 이 연산자는 문자열 변수와 함께 사용할 수 없으며, 컬렉션의 요소를 제거하는 데도 사용할 수 없습니다.
-= 연산자는 두 개의 연산자가 결합되어 있습니다. 먼저 빼고, 그런 다음 할당합니다. 따라서 다음 문과 동일합니다.
$a -= 2
$a = ($a - 2)
다음 예제에서는 -= 연산자를 사용하여 변수 값을 감소시키는 방법을 보여줍니다.
C:\PS> $a = 8
C:\PS> $a -= 2
C:\PS> $a
6
또한 -= 대입 연산자를 사용하여 숫자 배열의 구성 값을 감소시킬 수 있습니다. 이렇게 하려면 변경하려는 배열 요소의 지수를 지정합니다. 다음 예제에서는 배열(element 2)의 세 번째 요소 값은 1씩 감소합니다.
C:\PS> $a = 1,2,3
C:\PS> $a[2] -= 1.
C:\PS> $a
1
2
2
-= 연산자를 사용하여 변수 값을 삭제할 수 없습니다. 변수에 할당된 모든 값을 삭제하려면 Clear-Item 또는 Clear-Variable cmdlet을 사용하여 $null 또는 "" 값을 변수에 할당합니다.
$a = $null
배열에서 특정 값을 삭제하려면 배열 표기법을 사용하여 $null 값을 특정 항목에 할당합니다. 예를 들어 다음 문은 배열에서 두 번째 값(인덱스 위치 1)을 삭제합니다.
C:\PS> $a = 1,2,3
C:\PS> $a
1
2
3
C:\PS> $a[1] = $null
C:\PS> $a
1
3
변수를 삭제하려면 Remove-Variable cmdlet을 사용합니다. 이 방법은 변수가 특정 데이터 유형에 명시적으로 캐스팅하여 입력하지 않은 변수만 찾을 때 유용합니다. 다음 명령은 $a 변수를 삭제합니다.
remove-variable a
곱하기 대입 연산자(*=)
곱하기 대입 연산자(*=)는 숫자 값을 곱하거나 변수의 문자열 값 복사본의 지정된 숫자를 추가합니다.
변수에 단일 숫자 값이 있는 경우 해당 값은 연산자의 오른쪽에 있는 값만큼 곱해집니다. 예를 들어 다음 예제에서는 *= 연산자를 사용하여 변수 값을 곱하는 방법을 보여줍니다.
C:\PS> $a = 3
C:\PS> $a *= 4
C:\PS> $a
12
이 경우 *= 연산자는 두 개의 연산자가 결합되어 있습니다. 먼저 곱하고, 그런 다음 할당합니다. 따라서 다음 문과 동일합니다.
$a *= 2
$a = ($a * 2)
변수에 단일 값이 있는 경우 Windows PowerShell은(는) 다음과 같이 지정된 문자열 수를 값에 추가합니다.
C:\PS> $a = "file"
C:\PS> $a *= 4
C:\PS> $a
filefilefilefile
배열 요소를 곱하려면 인덱스를 사용하여 곱하려는 요소를 식별합니다. 예를 들어 다음 명령은 배열의 첫 번째 요소(인덱스 위치 0)에 2를 곱합니다.
$a[0] *= 2
나누기 대입 연산자(/=)
나누기 대입 연산자(/=)는 연산자의 오른쪽에 지정된 값만큼 숫자 값을 나눕니다. 연산자는 문자열 변수와 함께 사용할 수 없습니다.
/= 연산자는 두 개의 연산자가 결합되어 있습니다. 먼저 나누고, 그런 다음 할당합니다. 따라서 다음 두 개의 문과 동일합니다.
$a /= 2
$a = ($a / 2)
예를 들어 다음 연산자는 / = 연산자를 사용하여 변수 값을 나누는 방법을 보여줍니다.
C:\PS> $a = 8
C:\PS> $a /=2
C:\PS> $a
4
배열 요소를 나누려면 인덱스를 사용하여 나누려는 요소를 식별합니다. 예를 들어 다음 명령은 배열의 두 번째 요소(인덱스 위치 1)를 2로 나눕니다.
$a[1] /= 2
모듈러스 대입 연산자(%=)
모듈러스 대입 연산자(%=)는 연산자의 오른쪽에 있는 값만큼 변수 값을 나눕니다. 그런 다음 %= 연산자는 나머지(모듈러스라고 함)를 변수에 할당합니다. 변수에 단일 숫자 값이 있는 경우에만 이 연산자를 사용할 수 있습니다. 변수에 문자열 변수 또는 배열이 있는 경우에 이 연산자를 사용할 수 없습니다.
%= 연산자는 두 개의 연산자가 결합되어 있습니다. 먼저 나누고 나머지를 구한 다음, 나머지를 변수에 할당합니다. 따라서 다음 문과 동일합니다.
$a %= 2
$a = ($a % 2)
다음 예제에서는 %= 연산자를 사용하여 몫의 나머지를 저장하는 방법을 보여줍니다.
C:\PS> $a = 7
C:\PS> $a %= 4
C:\PS> $a
3
증가 및 감소 연산자
증가 연산자(++)는 변수 값을 1씩 증가시킵니다. 간단한 문에서 증가 연산자를 사용하는 경우 값이 반환되지 않습니다. 결과를 보려면 다음과 같이 변수 값을 표시합니다.
C:\PS> $a = 7
C:\PS> ++$a
C:\PS> $a
8
값을 강제로 반환하려면 다음과 같이 변수와 연산자를 괄호로 묶습니다.
C:\PS> $a = 7
C:\PS> (++$a)
8
증가 연산자는 변수 앞(접두사) 또는 뒤(접미사)에 배치할 수 있습니다. 연산자의 접두사 버전은 다음과 같이 값이 문에서 사용되기 전에 변수를 증가시킵니다.
C:\PS> $a = 7
C:\PS> $c = ++$a
C:\PS> $a
8
C:\PS> $c
8
연산자의 접미사 버전은 다음과 같이 값이 문에서 사용된 후에 변수를 증가시킵니다. 다음 예제에서 $a가 변경되기 전에 값을 $c에 할당하기 때문에 $c와 $a 변수는 다른 값을 가집니다.
C:\PS> $a = 7
C:\PS> $c = $a++
C:\PS> $a
8
C:\PS> $c
7
감소 연산자(--)는 변수 값을 1씩 감소시킵니다. 증가 연산자와 마찬가지로 간단한 문에서 연산자를 사용하는 경우 값이 반환되지 않습니다. 값을 반환하려면 다음과 같이 괄호를 사용합니다.
C:\PS> $a = 7
C:\PS> --$a
C:\PS> $a
6
C:\PS> (--$a)
5
연산자의 접두사 버전은 다음과 같이 값이 문에서 사용되기 전에 변수를 감소시킵니다.
C:\PS> $a = 7
C:\PS> $c = --$a
C:\PS> $a
6
C:\PS> $c
6
연산자의 접미사 버전은 다음과 같이 값이 문에서 사용된 후에 변수를 감소시킵니다. 다음 예제에서 $a가 변경되기 전에 값을 $d에 할당하기 때문에 $d와 $a 변수는 다른 값을 가집니다.
C:\PS> $a = 7
C:\PS> $d = $a--
C:\PS> $a
6
C:\PS> $d
7
MICROSOFT .NET FRAMEWORK 유형
기본적으로 변수가 하나의 값만 가지는 경우 변수에 할당된 값이 변수의 데이터 유형을 결정합니다. 예를 들어 다음 명령은 정수(System.Int32) 유형을 가지는 변수를 만듭니다.
$a = 6
변수의 .NET Framework 유형을 찾으려면 다음과 같이 GetType 메서드와 그 FullName 속성을 사용합니다. 메서드 호출이 인수를 가지지 않더라도 GetType 메서드 이름 다음에 괄호를 포함하세요.
C:\PS> $a = 6
C:\PS> $a.gettype().fullname
System.Int32
문자열을 포함하는 변수를 만들려면 문자열 값을 변수에 할당합니다. 값이 문자열임을 나타내려면 다음과 같이 따옴표로 묶습니다.
C:\PS> $a = "6"
C:\PS> $a.gettype().fullname
System.String
변수에 할당된 첫 번째 값이 문자열인 경우 Windows PowerShell은(는) 모든 연산을 문자열 연산으로 처리하고 새 값을 문자열에 캐스팅합니다. 이러한 경우는 다음 예제에 나와 있습니다.
C:\PS> $a = "file"
C:\PS> $a += 3
C:\PS> $a
file3
첫 번째 값이 정수인 경우, Windows PowerShell은(는) 모든 연산을 정수 연산으로 처리하고 새 값을 정수에 캐스팅합니다. 이러한 경우는 다음 예제에 나와 있습니다.
C:\PS> $a = 6
C:\PS> $a += "3"
C:\PS> $a
9
변수 이름 또는 첫 번째 할당 값을 앞에 대괄호로 묶어 유형 이름을 배치함으로써 새 스칼라 변수를 .NET Framework 유형으로 캐스팅할 수 있습니다. 변수를 캐스팅할 때 변수에 저장할 수 있는 데이터 유형을 확인할 수 있습니다. 그리고 변수를 조작할 때 변수가 동작하는 방식을 확인할 수 있습니다.
예를 들어 다음 명령은 변수를 문자열 유형으로 캐스팅합니다.
C:\PS> [string]$a = 27
C:\PS> $a += 3
C:\PS> $a
273
다음 예제에서는 변수를 캐스팅하는 대신 첫 번째 값을 캐스팅합니다.
$a = [string]27
변수를 특정 유형에 캐스팅하는 경우 일반적으로 값이 아닌 변수를 캐스팅합니다. 그러나 값이 새로운 데이터 유형으로 변환할 수 없는 경우 기존 변수의 데이터 유형을 다시 캐스팅할 수 없습니다. 데이터 유형을 변경하려면 다음과 같이 값을 대체해야 합니다.
C:\PS> $a = "string"
C:\PS> [int]$a
Cannot convert value "string" to type "System.Int32". Error: "Input
string was not in a correct format."
At line:1 char:8
+ [int]$a <<<<
C:\PS> [int]$a =3
그리고 가진 변수 이름에 데이터 유형을 앞에 두면, 또 다른 데이터 유형을 지정하여 유형을 명시적으로 재정의하지 않은 한 해당 변수 유형은 고정됩니다. 기존 유형과 호환되지 않는 값을 할당하려 하고 유형을 명시적으로 재정의하지 않은 경우, Windows PowerShell은(는) 다음 예제와 같이 오류를 표시합니다.
C:\PS> $a = 3
C:\PS> $a = "string"
C:\PS> [int]$a = 3
C:\PS> $a = "string"
Cannot convert value "string" to type "System.Int32". Error: "Input
string was not in a correct format."
At line:1 char:3
+ $a <<<< = "string"
C:\PS> [string]$a = "string"
Windows PowerShell에서 배열에 여러 항목이 있는 변수의 데이터 유형은 한 항목이 있는 변수의 데이터 유형과 다르게 취급됩니다. 데이터 유형이 배열 변수에 명확하게 할당되지 않은 경우 데이터 유형은 항상 System.Object []입니다. 이 데이터 유형은 배열에 적용됩니다.
간혹 다은 유형을 지정하여 기본 유형을 재정의하기도 합니다. 예를 들어 다음 명령은 변수를 문자열 [] 배열 유형으로 캐스팅합니다.
[string []] $a = "one", "two", "three"
Windows PowerShell 변수는 .NET Framework 데이터 유형이 될 수 있습니다. 또한 현재 프로세스에서 사용할 수 있는 정규화된 .NET Framework 데이터 유형을 할당할 수 있습니다. 예를 들어 다음 명령은 System.DateTime 데이터 유형을 지정합니다
[system.datetime]$a = "5/31/2005"
변수는 System.DateTime 데이터 유형을 준수하는 값을 할당합니다. $a 변수 값은 다음과 같습니다.
Tuesday, May 31, 2005 12:00:00 AM
여러 개의 변수 할당
Windows PowerShell에서는 하나의 명령을 사용하여 값을 여러 개의 변수에 할당할 수 있습니다. 할당 값의 첫 번째 요소가 첫 번째 변수에 할당되고, 두 번째 요소는 두 번째 변수에, 세 번째 요소는 세 번째 요소 등과 같은 방식으로 할당됩니다. 예를 들어 다음 명령은 값 1을 $a 변수에 할당하고, 값 2를 $b 변수에, 값 3을 $c 변수에 할당합니다.
C:\PS> $a, $b, $c = 1, 2, 3
할당 값에 변수보다 많은 요소가 있는 경우 나머지 모든 값은 마지막 변수에 할당됩니다. 예를 들어 다음 명령은 세 개의 매개 변수와 다섯 개의 값을 포함합니다.
$a, $b, $c = 1, 2, 3, 4, 5
따라서, Windows PowerShell은(는) 값 1을 $a 변수에, 값 2를 $b 변수로 할당합니다. 또 값 3, 4, 5는 $c 변수에 할당합니다. $c 변수의 값을 다른 세 개의 변수에 할당하려면 다음 형식을 사용합니다.
$d, $e, $f = $c
이 명령은 값 3을 $d 변수에, 값 4를 $e 변수에, 값 5를 $f 변수에 할당합니다.
또한 변수를 연결하여 하나의 명령을 여러 개의 변수에 할당할 수 있습니다. 예를 들어 다음 명령은 "three" 값을 네 개의 변수에 모두 할당합니다.
$a = $b = $c = $d = "three"
VARIABLE-RELATED CMDLET
대입 연산자를 사용하여 변수 값을 설정하는 것 외에도 Set-Variable cmdlet을 사용할 수도 있습니다. 예를 들어 다음 명령은 Set-Variable cmdlet을 사용하여 1, 2, 3 배열을 $a 변수에 할당합니다.
Set-Variable -name a -value 1, 2, 3
참고 항목
about_arrays
about_Hash_Tables
about_Variables
Clear-Variable
Remove-Variable
Set-Variable