ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [PowerShell 기초] 3. 변수(Variables)
    Shell & CMD/PowerShell 2021. 12. 5. 10:52
    반응형

    1. Bash vs Powershell

    Powershell은 bash 에서 와 달리 변수 선언에 약간 차이가 있다.

    먼저 bash를 살펴보겠다.

    # 정수형 사용 예시
    test=1 # 변수선언
    echo $test # 사용예시 결과값 : 1
    echo $(($test+$test)) # 사용예시 결과값 : 2
    
    # 문자형 사용 예시
    name=ddochea # 변수선언
    echo "$name, hello!" # 사용예시 결과값 : ddochea, hello!
    echo "$name, hello! $test" # 사용예시 결과값 : ddochea, hello! 1
    
    # 배열 사용 예시
    arr="1 2 3" # 변수선언
    for i in $arr; do echo "$i time visited."; done
    # 사용예시 결과
    # 1 time visited.
    # 2 time visited.
    # 3 time visited.
    for i in $arr; do echo "$(($i+$i)) time visited."; done
    # 사용예시 결과 2
    # 2 time visited.
    # 4 time visited.
    # 6 time visited.

    반면 Powershell은 아래와 같다.

    #정수형 사용 예시
    $test=1 # 변수선언
    echo $test # 변수 사용예시 결과값 : 1
    echo $($test+$test) # 변수 사용예시 결과값 : 2, ($test+$test) 도 사용가능.
    
    #문자형 사용 예시
    $name='ddochea' # 변수선언. $name="ddochea" 로도 사용가능하다.
    echo "$name, hello!" # 사용예시 결과값 : ddochea, hello!
    echo "$name, hello! $test" # 사용예시 결과값 : ddochea, hello! 1
    
    #배열 사용 예시
    $arr=1,2,3 # 변수선언
    foreach ($i in $arr) { echo "$i time visited."}
    # 사용예시 결과 1
    # 1 time visited.
    # 2 time visited.
    # 3 time visited.
    foreach ($i in $arr) { echo "$($i+$i) time visited."}
    # 사용예시 결과 2
    # 2 time visited.
    # 4 time visited.
    # 6 time visited.
    

    얼핏 보면 문법의 차이만 존재할 뿐, bash 대비 powershell의 장점이 보이진 않는다. 하지만 지난 시간에 살펴보았던 것처럼, powershell에는 타입(Type)의 개념이 존재한다.

    저장한 변수의 타입(Type)을 확인

    2. Type있는 변수 선언

    지난번 언급한 것처럼, Powershell은 Type 개념이 존재한다. 변수명 뒤에 .GetType() 함수를 입력하면 변수의 타입을 확인할 수 있다.

    저장한 변수의 타입(Type)을 확인

     

    Array의 경우는 단일 변수와 조금 차이점이 있다. 앞서 bash 와의 차이점을 알아보며 생성했던 $arr변수의 타입을 확인하면 아래와 같이 나올 것이다.

    Object 배열 형식으로 나오는 $arr 변수 상태

    Int[] 형식일 줄 알았는데 Object[]로 나오게 된다. 보다 정확하게 타입을 지정해서 쓰고 싶다면 아래와 같은 방법으로 Array를 선언해야 한다.

    [int32[]]$typedArr=1,2,3 #타입을 지정한 배열함수 생성

    Int배열 형식으로 나오는 $typedArr 변수 상태

    3. Powershell의 Type지원 범위

    Powershell 소개 단계에서 Powershell 은 .NET 및 .NET Core를 기반으로 개발되었다고 하였다. 따라서 .NET에서 제공하는 Int, Long, Float 같은 변수 외 제네릭(Generic) 컬렉션과 같은 타입도 사용할 수 있다.

    아래 스크립트는 .NET 의 대표적인 제네릭 형식이 List 객체를 선언하는 예시이다.

    $list = New-Object System.Collections.Generic.List[int]

    .NET 개발자라면 해당 코드가 List<int> list = new(); 와 동일하다는 것을 알 수 있다. 사용법도 거의 유사하다.

    List[int] 사용 예시

     

    또한 Get-Process cmdlet 을 조합하여 process와 같은 동작 중인 프로그램을 객체로 받을 수도 있다. 그리고 해당 객체의 메소드를 이용해 동작을 수행할 수도 있다.

    # OS에서 실행중인 notepad 프로세스를 $notepad 변수에 정의
    $notepad = Get-Process -Name Notepad 

    Process 변수 사용 예시

    Powershell에선 cmdlet 에서 출력하는 거의 모든 형식을 다 받을 수 있으며, 해당 변수를 입력 값으로 받아 조합하여 사용할 수도 있다.

    요약

    powershell은 bash 와 달리, Type 형식이 명확하며, .NET 기반의 형식 체계를 사용할 수 있다. 또한 cmdlet의 출력 결과를 변수에 담은 뒤 사용할 수 있다.

     

    출처 :

    System.Collections.Generic 네임스페이스 | Microsoft Docs

    배열 정보 - PowerShell | Microsoft Docs

    7. Lists, Arrays, and Hashtables - Windows PowerShell Cookbook, 3rd Edition [Book] (oreilly.com)

    반응형

    댓글

Designed by Tistory.