🏷️문자열 값을 변경하는 확장자
📌개념
- 변수의 값이 문자열일 때, 패턴을 통해 문자열을 변경하도록 도와주는 확장자가 존재한다.
- 다음은 확장자들을 정리한 것이다.
📌확장자
#과 %
확장자 | 설명 |
---|
${변수#패턴} | 문자열에서 지정한 패턴과 앞에서부터 처음으로 일치하는 부분의 앞쪽 문자열을 지운다. |
${변수##패턴} | 문자열에서 지정한 패턴과 앞에서부터 마지막으로 일치하는 부분의 앞쪽 문자열을 지운다. |
${변수%패턴} | 문자열에서 지정한 패턴과 뒤에서부터 처음으로 일치하는 부분의 뒷쪽 문자열을 지운다. |
${변수%%패턴} | 문자열에서 지정한 패턴과 뒤에서부터 마지막으로 일치하는 부분의 뒷쪽 문자열을 지운다. |
#
은 전방 탐색을 의미하고, %
는 후방탐색을 의미한다.
- 키보드에서
#
은 $
을 기준으로 앞쪽에 위치하고, %
은 뒷쪽에 위치한다고 암기하면 된다.
##
나 %%
처럼 #
, %
를 두 번 연속 사용하면, 마지막으로 일치하는 부분을 찾는다.
- 문자열 앞을 제거하는
#
계열의 경우, 모든 문자열을 의미하는 와일드 카드인 *
을 패턴 앞에 붙여줘야 한다.
- 이와 반대로, 문자열 뒷쪽을 제거하는
%
계열의 경우, *
를 패턴 뒤에 붙여줘야 한다.
- 실습에 사용할 문자열은
aabbcc ccbbaa
다.
$ TEST="aabbcc ccbbaa"
$ echo ${TEST#*bb}
cc ccbbaa
$ echo ${TEST##*bb}
aa
$ echo ${TEST%bb*}
aabbcc cc
$ echo ${TEST%%bb*}
aa
문자열의 길이
확장자 | 설명 |
---|
${#변수} | 문자열의 길이를 리턴한다. |
- 🖇️cf)
#
은 일반적으로 number을 의미한다.
$ TEST="aabbcc ccbbaa"
$ echo ${#TEST}
13
문자열 교체
확장자 | 설명 |
---|
${변수/pattern/new} | 문자열에서 pattern과 앞에서부터 처음으로 일치하는 부분을 new로 교체한다. |
${변수/pattern} | /new 가 비어있으면, 앞에서부터 처음으로 일치하는 부분을 제거한다. |
${변수//pattern/new} | 문자열에서 pattern과 일치하는 부분을 모두 new로 교체한다. |
${변수//pattern} | /new 가 비어있으면, 일치하는 부분을 모두 제거한다. |
${변수/#pattern/new} | 문자열에서 시작 문자열이 pattern과 일치하는 경우, new로 교체한다. |
${변수/%pattern/new} | 문자열에서 마지막 문자열이 pattern과 일치하는 경우, new로 교체한다. |
- 여기서도
#
과 %
는 전방과 후방을 의미한다.
//
는 문자열 전체에서 패턴과 일치하는 문자열을 교체한다.
$ TEST="aabbcc ccbbaa"
$ echo ${TEST/bb/ff}
aaffcc ccbbaa
$ echo ${TEST/bb}
aacc ccbbaa
$ echo ${TEST//bb/ff}
aaffcc ccffaa
$ echo ${TEST//bb}
aacc ccaa
$ echo ${TEST/#aa/ff}
ffbbcc ccbbaa
$ echo ${TEST/%aa/ff}
aabbcc ccbbff