티스토리 뷰

name=-9021

what=${name%${name#?}}

변수확장이란 변수명 앞에 $를 붙이는 것이었습니다.

 

덧붙여서 { } 를 이용하여 변수를 다른 문자열과 구분지을 수도 있고 다양한 조작도 가능합니다.

 

${ something }

 

일단 세 가지를 다루었습니다.

 

echo ${#name}                   # 변수 길이 출력
echo ${name:index:length}       # 부분 문자열 추출
echo ${name#pattern}            # name 의 앞부분에서 globbing pattern 에 해당되는 문자열 제거

 

# 이 들어간 것을  하나 더 공부합니다. 

 

${name##pattern}

 

앞서 # 이 하나 들어간 것과의 차이는? greedy match 여부입니다.

# 가 하나일 때는 짧게 ## 는 최대한 길에 match 되는 것을 찾습니다.

 

예를 봅시다.

 

pattern " * .  " 는 . 으로 끝나는 아무 문자열을 뜻합니다.

두 개가 있네요.

 

www. 

www.mathtrauma.

 

# 하나는 짧게 매치된 www. 을 잘라내었기에 남은 것은 mathtrauma.com 이 되고

## 는 길게 매치된 www.mathtrauma. 을 잘라내어서 com 을 남겼습니다.

 

 

흠! 앞에서 매치된 문자열을 제거하는 방법이 제공된다면 뒤쪽을 잘라내는 것도 있을 것 같습니다.

네! 있었습니다. % 를 사용합니다.

${name%pattern}

${name%%pattern}

 

두 가지가 어떻게 사용되는지 짐작이 됩니다. 하나는 짧게, 하나는 길게 뒤쪽에서 match 시킨 뒤에  제거합니다.

이번에는 두 개를 섞어서 쓴 것을 봅시다.

 

name=-9061

what=${name%${name#?}}

 

what 은 무엇일까요?

% 뒷부분은 제거해야할 문자열 혹은 문자열 패턴이어야 합니다.

? 는 아무거나 한 문자를 뜻하니 ${name#?} 는 name 에서 첫 문자를 제거한 나머지입니다.

즉, ${name#?}=9061 이죠.

 

what=${name%9061}

 

9061 을 name 뒤에서 잘라내면 남는 것은 - 입니다.

결국, 

what=-

 

입니다. index 기반으로 표현하면

 

what=${name:0:1}

 

로 바꾸어 쓸 수 있습니다. 여기서는 이 방식이 이해하기 쉬워보이지만...

pattern match 를 사용할 수 있다는 점에서 앞의 방식이 유리한 경우도 많은가 봅니다. 

 

다음 편에서는 변수확장 마무리 짓겠습니다!

반응형

'Programming Language > Shell Programming' 카테고리의 다른 글

Bash Scripting 06 - 문자열  (0) 2022.07.20
Bash Scripting 05 - 변수확장 (3)  (0) 2022.07.20
Bash Scripting 03 - Globbing  (0) 2022.07.11
Bash Scripting 02 - 변수확장(1)  (0) 2022.07.09
Bash Scripting 01 - 공백!  (0) 2022.07.09
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/10   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함