[Linux 셸 스크립트] 변환처리 - 017 문자 속 공백문자를 포함한 문자열 변수를 인수로 쓰기
본문 바로가기
IT 이야기/Linux 셸 스크립트

[Linux 셸 스크립트] 변환처리 - 017 문자 속 공백문자를 포함한 문자열 변수를 인수로 쓰기

by 찬찬이 아빠 2021. 3. 5.
반응형
  1. 사용 명령어

(1) echo

 

  2. 키워드 & 사용처

(1) 키워드

공백문자, 스페이스, 문자열, 큰따옴표

 

(2) 사용처

공백문자(스페이스)를 포함한 문자열을 한 문장으로 다루고 싶을 때 사용합니다.

 

  3. 실행 예제
$ ./space-str.sh
ERROR: invalid value

 

 

  4. 스크립트

#!/bin/sh

 

result="invalid value"

 

if [ "$result" = "invalid value" ]; then         

    echo "ERROR: $result" 1>&2

    exit 1

fi

 

  5. 해설

이 스크립트는 공백문자를 포함한 문자열을 if문으로 비교해서 값이 "invalid value"라는 문자열일 때 에러를 출력합니다. 공백을 포함한 문자열 취급이 핵심입니다.

 

셸 스크립트에서 변수 구분자는 셸 변수 IFS로 정의하는데 기본값은 공백 기호, 탭, 줄 바꿈이 지정되어 있습니다. 즉 공백문자는 변수의 구분자를 뜻하는 특별한 의미가 있습니다.

 

그러므로 공백문자가 포함된 문자열이 저장된 변수를 따옴표 처리하지 않으면 쪼개진것 처럼 인식하여 생각과 다른 동작을 할 수도 있습니다.

 

①에서는 변수 result가 공백문자를 포함하므로 이것을 따옴표로 묶어 "$result"처럼 처리합니다. 만약 따옴표를 하지 않은 채 $result라고 작성하면 아래처럼 등호 기호의 왼쪽에 인수가 두 개 있다고 해석할 것입니다.

if [ invalid value = "invalid value" ]; then

결과적으로 아래와 같이 인수가 너무 많다는 에러가 발생합니다.

$ ./space-str.sh
./space-str.sh: line 5: [: too many arguments

 

따라서 에서는 공백문자를 포함한 변수 result를 큰따옴표 기호로 둘러 싸서 "$result"라고 작성해서 공백문자를 포함한 전체를 하나의 문자열로 다룹니다.

 

또한 변수 result값이 비었으면 다음처럼 해석됩니다.

if [ = "invalid value" ]; then

즉, 비교 대상이 없는 상태로 등호 기호를 쓴 경우가 되어 아래 처럼 문법 에러가 발생합니다(표시되는 에러 메시지는 OS에 따라 다릅니다).

$ ./space-str.sh
./space-str.sh: line 5: [: =: unary operator expected​

 

셸 스크립트에서 변수에 문자열을 넣고 사용할 때는 '공백문자가 들어가거나 빈 문자열일지도 모른다'라고 늘 염두에 둬야 합니다. 이 예제처럼 공백문자를 포함하든지 안 하든지 따옴표 처리를 합시다.

 

 

 

참고서적 : 유닉스 리눅스 셸 스크립트 예제 사전

반응형

댓글