inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

리눅스 쉘 스크립트 마스터

${object%%:*}, ${object#*:}는 어떤 뜻인가요

해결된 질문

397

왈왈

작성한 질문수 2

2

안녕하세요.

"배열과 glob 그리고 루프문" 강의를 듣고 실습중인데

아래 KEY와 VALUE 쪽에 ${object%%:*}, ${object#*:} 여기서 쓰인 기호들 뜻이 궁금합니다

root@eb0201ac5fe0:/home/test# ARRAY=( "sky:blue" "snow:white" "night:black")
root@eb0201ac5fe0:/home/test#
root@eb0201ac5fe0:/home/test# for object in "${ARRAY[@]}" ; do
>     KEY=${object%%:*}
>     VALUE=${object#*:}
>     printf "%s's color is %s.\n" "$KEY" "$VALUE"
> done
sky's color is blue.
snow's color is white.
night's color is black.
root@eb0201ac5fe0:/home/test#

 

linux shell-script

답변 1

1

홍영기

안녕하세요. 왈왈님!

궁금하신 내용에 대하여 답변드립니다.

KEY=${object%:*} 혹은 KEY=${object%%:*}

이 구문은 object의 문자열에서 :을 기준으로 앞 부분만 추출합니다. ${variable%%pattern}은 variable에서 가장 오른쪽에 있는 pattern 앞의 모든 문자열을 반환합니다. 따라서 이 구문은 object에서 : 앞의 부분만 KEY에 저장합니다.

(예) VAR="sky:blue" 여기서 sky 만 남기고 싶다면 이렇게 하면 됩니다. echo ${VAR%:*} . 실행결과는 sky

여기서 % 와 %% 는 차이가 있는데요.

% 은 오른쪽의 가장 짧게 일치하는 패턴을 제거합니다.

%% 은 오른쪽의 가장 길게 일치하는 패턴을 제거합니다.

예를들어

admin👻 VAR="sky:blue:blue"

admin👻 echo ${VAR%%:*}

sky

admin👻 echo ${VAR%:*}

sky:blue

 

VALUE=${object#*:} 혹은 VALUE=${object##*:}

이 구문은 object의 문자열에서 :을 기준으로 뒷 부분만 추출합니다. ${variable#pattern}은 variable에서 가장 왼쪽에 있는 pattern 뒤의 모든 문자열을 반환합니다. 따라서 이 구문은 object에서 : 뒤의 부분만 VALUE에 저장합니다.

(예) VAR="sky:blue" 여기서 blue 만 남기고 싶다면 이렇게 하면 됩니다. echo ${VAR#*:} . 실행결과는 sky

여기서도 # 와 ## 는 차이가 있는데요

# 은 왼쪽의 가장 짧게 일치하는 패턴을 제거합니다.

## 은 왼쪽의 가장 길게 일치하는 패턴을 제거합니다.

예를들어

admin👻 VAR="sky:blue:blue"

admin👻 echo ${VAR##*:}

blue

admin👻 echo ${VAR#*:}

blue:blue

 

이와 관련 강의 영상 매개변수 확장(PE) 입니다. 참고해주세요

 

0

왈왈

정성스러운 설명 너무 감사드립니다.

해당 강의 다시 한번 봐야겠습니다.
강의 항상 잘 보고 있습니다. 좋은 하루 되세요!

59회차 학습 미작동

0

66

2

BASH_REMATCH 변수가 어디서 나온거죠?

1

915

1

./euid.sh

2

398

1

touch 'Gone with the wind.mp3' 입력 결과가 다릅니다

1

364

1

스크립트에서 %는 무엇을 의미하나요?

1

520

1

하드 링크, 심볼릭 링크

1

691

2

[..]와 테스트 강의에서

1

389

1

하드 링크, 심볼릭 링크

0

631

1

변수명이 출력되지 않습니다.

1

286

1

변수명 출력이 되지 않습니다.

0

345

1

select in case문 질문

0

231

1

crontab 질문이 있습니다.

1

224

2

(..)_(..) 와 BASH_REMATCH

1

748

1

^[.+] 정규표현식이 RegExr 를 나타내는게 맞나요?

1

389

2

실습자료를 다운받은 다음에 어떻게 해야 하나요?

0

436

3

sudo cp helloworld.sh /usr/bin 명령어 질문

1

604

1

read -p 명령어가 동작하지 않습니다.

2

351

1

wc 명령어에 -L 옵션이 동작하지 않습니다.

1

437

1

book이 변수가 아니라 파일인가요?

1

356

1

sed 관련 질문

1

641

2

파일접근권한 강의

1

144

1

[] 결과

2

211

1

# (주석) 관련 질문 드립니다.

1

164

1

bash 타이핑 정보 읽어들이기

1

210

1