bash script2023. 6. 30. 16:17

 

반달가면 이글루에서 백업 - 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 

 

 

728x90
Posted by 반달가면