변수 초기화를 위한 확장자

MySprtlty·2022년 7월 10일
0

Bash Shell Script

목록 보기
6/11
post-thumbnail

🏷️변수 초기화를 위한 확장자

📌개념

  • 변수를 초기화 할때, 외부에서 넘겨준 값으로 변수를 사용하는 경우와 그렇지 않아 default값을 사용하는 경우가 많다.
  • 따라서 셸 스크립트에선 변수를 초기화할 때, 여러 확장자를 지원한다.

📌변수의 상태

  • 변수의 상태는 크게 3가지로 구분할 수 있다.
    • 선언된 변수
      • (1) 정상적인 값을 가지는 변수
      • (2) NULL값을 가지는 변수
    • (3) 선언되지 않은 변수

📌확장자

  • 다음은 변수를 다양한 방식으로 초기화 및 치환 하도록 도와주는 확장자들이다.

-=

확장자설명
${변수-문자열}변수가 선언되지 않은 경우, 지정한 문자열로 변수를 치환한다.
${변수:-문자열}변수가 선언되지 않았거나 NULL값으로 선언된 경우, 문자열로 변수를 치환한다.
${변수=문자열}변수가 선언되지 않은 경우, 문자열을 변수에 대입하고 문자열로 변수를 치환한다.
${변수:=문자열}변수가 선언되지 않았거나 NULL값으로 선언된 경우, 문자열을 변수에 대입하고 문자열로 변수를 치환한다.
  • :NULL값인 경우를 의미한다.
  • -=는 변수가 선언되지 않은 경우를 의미한다.
  • 계속 해당 변수를 사용할 예정이라면, -대신 =쪽을 사용하는 것이 좋다.
  • 다음은 실습인데, $는 프롬프트를 의미한다.

변수 TEST가 정상적인으로 선언되어 있는 경우 case (1)

$ TEST=Hello
$ echo ${TEST-bye}
Hello
$ echo ${TEST:-bye}
Hello
$ echo ${TEST=bye}
Hello
$ echo ${TEST:-bye}
Hello
  • 모든 경우에서 Hello가 정상적으로 출력된다.

변수 TEST가 NULL값으로 선언되어 있는 경우 case (2)

$ TEST=""
$ echo ${TEST-Bye}

$ echo ${TEST:-Bye}
Bye
$ echo ${TEST=Bye}

$ echo ${TEST:=Bye}
Bye
  • :-:=경우에만 Hello가 출력된다.
  • 🖇️cf) echo ${TEST:=bye} 명령을 수행하고 나선, TEST변수에 Bye가 대입된다.
  • 🖇️cf) 변수=""로 선언하면, 변수는 NULL값을 갖게된다.

변수가 선언되어 있지 않은 경우 case (3)

$ unset TEST
$ echo ${TEST-Bye}
Bye
$ echo ${TEST:-Bye}
Bye
$ echo ${TEST=Bye}
Bye
$ unset TEST
$ echo ${TEST:=Bye}
Bye
  • echo ${TEST=Bye} 명령 수행뒤엔 TEST변수가 Bye값으로 선언되어 있기 때문에 unset명령을 사용한다.

+?

확장자설명
${변수+문자열}변수가 선언된 경우, 문자열로 변수를 치환한다.
${변수:+문자열}NULL값이 아닌 정상적인 값을 갖도록 변수가 선언된 경우, 문자열로 변수를 치환한다.
${변수?에러 메세지}변수가 선언되어있는 경우 변수의 값을 사용하나, 선언되어있지 않은 경우 STDERR로 에러를 출력한다.
${변수:?에러 메세지}NULL값이 아닌 정상적인 값을 갖도록 변수가 선언된 경우 변수의 값을 사용하나, 선언되어있지 않은 경우 STDERR로 에러를 출력한다.
  • :NULL값을 의미하긴 하는데, 위와 달리 배제적인 맥락이다.
  • 다음은 실습이다.

변수 TEST가 정상적인으로 선언되어 있는 경우 case (1)

$ TEST=Hello
$ echo ${TEST+Bye}
Bye
$ echo ${TEST:+Bye}
Bye
$ echo ${TEST?Bye}
Hello
$ echo ${TEST:?Bye}
Hello

변수 TEST가 NULL값으로 선언되어 있는 경우 case (2)

$ TEST=""
$ echo ${TEST+Bye}
Bye
$ echo ${TEST:+Bye}

$ echo ${TEST?Bye}

$ echo ${TEST:?Bye}
bash: TEST: Bye
  • echo ${TEST:?Bye}에서 STDERR로 Bye에러 메세지를 출력하는 것을 볼 수 있다.

변수가 선언되어 있지 않은 경우 case (3)

$ unset TEST
$ echo ${TEST+Bye}

$ echo ${TEST:+Bye}

$ echo ${TEST?Bye}
bash: TEST: Bye
$ echo ${TEST:?Bye}
bash: TEST: Bye

문자열 자르기

  • 변수의 값이 문자열인 경우, 파이썬 문자열 슬라이싱과 같은 기능을 제공하는 확장자들이다.

  • 문자열 인덱스는 0부터 시작한다.

    확장자설명
    ${변수:시작 위치}변수값이 문자열인 경우, 시작위치부터 끝까지 출력한다.
    ${변수:시작 위치:길이}변수값이 문자열인 경우, 시작위치부터 끝까지 출력한다.
  • 다음은 실습이다.

$ TEST="Hello World"
$ echo ${TEST:6}
World
$ echo ${TEST:6:3}
Wor
profile
2Co 4:7

0개의 댓글