![Bash에서 문자열을 다른 문자열이나 부분 문자열로 분할](https://linux55.com/image/218559/Bash%EC%97%90%EC%84%9C%20%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%84%20%EB%8B%A4%EB%A5%B8%20%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%B4%EB%82%98%20%EB%B6%80%EB%B6%84%20%EB%AC%B8%EC%9E%90%EC%97%B4%EB%A1%9C%20%EB%B6%84%ED%95%A0.png)
나는 이 게시물에 댓글을 달고 있습니다: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
내가 읽는 방식이 아닙니다.수동, 내용은 다음과 같습니다.
만약에무늬"#"(위의 세 번째 형식) 앞에는 확장된 값의 시작 부분과 일치해야 합니다.범위.
나에게 이는 첫 번째 일치가 발생할 때 일치가 중지되어야 하므로 두 번째 시간을 반환해야 함 __
을 의미 하며 이는 예상된 것입니다.echo
123__456
내가 무엇을 놓치고 있나요?
답변1
POSIX 쉘의 경우 표준을 사용하십시오.매개변수 확장:
var="abc_def__123__456"
echo "${var%%__*}"
echo "${var#*__}"
산출:
abc_def
123__456