반달가면 이글루에서 백업 - http://bahndal.egloos.com/573464
특정 변수에 할당된 문자열을 다른 문자열과 조합할 때 좀 더 우아하게 표현하는 방법을 최근에 알게 되었다. 셸 파라메터 확장(shell parameter expansion)이라는 기능을 이용하는 것이다.
예를 들어 변수 str에 할당된 값 바로 뒤에 알파벳이나 수자, 또는 언더바(_) 등을 붙여야 할 때를 생각해 보자. 우선 아래의 예시는 잘못된 경우이다.
str="abcd"
# str 변수 뒤에 언더바(_)를 붙여서 출력 (잘못된 예시)
echo "$str_"
위의 경우 값이 제대로 출력되지 않는다. 변수 이름 자체가 str이 아니라 str_로 해석되기 때문이다. 얼마전까지 이런 상황이 있을 때는 변수를 하나 더 선언해서 해결했었다. 아래의 예시처럼 말이다.
str="abcd"
underbar="_"
# str 변수 뒤에 언더바(_)를 붙여서 출력
echo "$str$underbar"
abcd_
위와 같이 굳이 변수를 더 사용하지 않아도 다루고자 하는 변수를 중괄호({})로 감싸주면 좀 더 깔끔하게 표현할 수 있구나. 앞으로는 아래의 예시처럼 사용해야겠다.
str="abcd"
#str 변수 뒤에 언더바(_)를 붙여서 출력
echo "${str}_"
abcd_
문자열의 특정 위치에서 일부를 떼어낼 때도 요긴하다. 아래의 예시를 보자. 바이트 위치는 0부터 센다. 즉 문자열의 첫번째 바이트가 있는 위치가 0이다. 형식은 ${변수명:시작점:길이}가 된다.
str="abcd"
# 변수 str에 저장된 문자열에서 맨 앞의 3바이트 출력
echo "${str:0:3}"
abc
# 두번째 바이트부터 3바이트 출력
echo "${str:1:3}"
bcd
변수나 하나의 문자열에 대해 사용할 경우 expr 명령의 substr 옵션을 이용한 문자열 추출보다 좀 더 깔끔하다. expr 관련 내용은 이전 게시물을 참고하자. 여기로
배열(array)을 사용할 때도 중괄호가 사용된다. 배열에 대한 내용은 이전 게시물을 참고하자. 여기로
-- 2016.12.15 추가 --
문자열의 길이도 간단하게 알 수 있다. 예를 들어 변수 str에 할당된 문자열의 길이는 ${#str} 이런식으로 얻는다. 아래의 예시를 보자.
str="abcd"
# 변수 str에 할당된 문자열의 길이 출력
echo ${#str}
4
# 변수 my_str에 할당된 문자열이 있는지(길이가 0보다 큰지) 확인
if [[ ${#my_str} -gt 0 ]]
then echo "변수 my_str에 문자열이 할당되어 있습니다."
else echo "변수 my_str은 비어 있습니다."
fi
'bash script' 카테고리의 다른 글
[bash: grep] 문자열 검색하면서 행번호 같이 표시하기 (0) | 2023.07.03 |
---|---|
[bash: grep] 정규표현식에 사용되는 특수문자 (0) | 2023.07.03 |
[bash: expr] 특정 위치에서 특정 길이만큼 문자열 추출 (0) | 2023.06.30 |
[bash: awk] 특정 위치(field)에 대한 문자열 검색 (0) | 2023.06.29 |
[bash: date] 타임스탬프(timestamp)를 일반적인 표시 형식으로 변환 (0) | 2023.06.28 |