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
셸 스크립트에서 변수에 문자열을 넣고 사용할 때는 '공백문자가 들어가거나 빈 문자열일지도 모른다'라고 늘 염두에 둬야 합니다. 이 예제처럼 공백문자를 포함하든지 안 하든지 따옴표 처리를 합시다.
참고서적 : 유닉스 리눅스 셸 스크립트 예제 사전
'IT 이야기 > Linux 셸 스크립트' 카테고리의 다른 글
[Linux 셸 스크립트] 변환처리 - 019 언더스코어 등을 포함한 문자열에서 변수를 명확하게 구분하기 (0) | 2021.03.05 |
---|---|
[Linux 셸 스크립트] 변환처리 - 018 HTML 파일에서 태그 속에 적힌 주석을 추출해서 그대로 실행하기 (0) | 2021.03.05 |
[Linux 셸 스크립트] 변환처리 - 016 변수나 함수를 외부 파일로 작성하기 (0) | 2021.03.05 |
[Linux 셸 스크립트] 변환처리 - 015 작은따옴표 안에서 작은따옴표 쓰기 (0) | 2021.03.05 |
[Linux 셸 스크립트] 변환처리 - 014 값이 정수인지 확인해서 계산하기 (4) | 2021.03.05 |
댓글