Bash에서 문자열을 다른 문자열이나 부분 문자열로 분할

Bash에서 문자열을 다른 문자열이나 부분 문자열로 분할

나는 이 게시물에 댓글을 달고 있습니다:bash에서 일부 구분 기호로 문자열을 분할하시겠습니까?

내 시나리오에서는 Bash만 사용하여 이 작업을 수행하려고 시도했지만 이상한 동작이 발생했습니다.

shopt -s extglob
export var=abc_def__123__456
echo ${var/%__*}
echo ${var/#!(__)__}
shopt -u extglob

첫 번째는 echo예상대로 작동하고 abc_def. 나는 두 번째 echo출력을 기대했지만 123__456출력은 456내가 읽는 방식이 아닙니다.수동, 내용은 다음과 같습니다.

만약에무늬"#"(위의 세 번째 형식) 앞에는 확장된 값의 시작 부분과 일치해야 합니다.범위.

나에게 이는 첫 번째 일치가 발생할 때 일치가 중지되어야 하므로 두 번째 시간을 반환해야 함 __을 의미 하며 이는 예상된 것입니다.echo123__456

내가 무엇을 놓치고 있나요?

답변1

POSIX 쉘의 경우 표준을 사용하십시오.매개변수 확장:

var="abc_def__123__456"
echo "${var%%__*}"
echo "${var#*__}"

산출:

abc_def
123__456

관련 정보