티스토리 뷰
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
- Shell Programming
- math font
- 세그먼트 트리
- python3
- Vim
- Aho-Corasick
- JavaScript
- fenwick tree
- 정수론
- lazy propagation
- 다익스트라
- javascript array
- nearest common ancestor
- stack
- persistent segment tree
- segment tree
- shell
- map
- BOJ
- bash
- number theory
- script
- dynamic programming
- 백준
- bash script
- RUBY
- Reference
- C++ big number
- Dijkstra
- max flow
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |