패턴을 문자열로 교체

패턴을 문자열로 교체

선언한다고 가정해보자

test="/this/isjust/atestvariable/for/stringoperation"

우리는 "/"의 모든 인스턴스를 콜론 ":"으로 바꾸고 싶습니다.

그렇다면 다음 명령이 작동해야 한다고 생각합니다.

echo ${test//\/:}

( ${variable//pattern/string}모든 패턴 항목을 지정된 문자열로 바꿉니다)

그러나 echo 실행하면 ${test//\/:}다음과 같은 출력을 얻습니다.

/this/isjust/atestvariable/for/stringoperation

내가 어디에서 잘못되었을 수 있습니까? 당신의 도움을 주셔서 감사합니다.

답변1

이것:

${test//\/:}

//모든 인스턴스(여는 이중 슬래시로 시작)를 /:무엇이든(두 번째 이스케이프 처리되지 않은 슬래시 제외)로 바꿉니다.

이것:

${test/\//:}

대체할 것이다첫 번째(단일 슬래시가 구분 기호 역할을 하기 때문에) /(이스케이프됨)의 인스턴스는 와 동일합니다 :.

이:

${test//\//:}

/의 모든 항목은 로 대체되어야 합니다 :.

예:

$ test="/this/isjust/atestvariable/:for/:stringoperation"
$ echo ${test//\/:}
/this/isjust/atestvariableforstringoperation
$ echo ${test/\//:}
:this/isjust/atestvariable/:for/:stringoperation
$ echo ${test//\//:}
:this:isjust:atestvariable::for::stringoperation

답변2

백슬래시를 사용하여 슬래시를 이스케이프 처리하세요.

echo ${test//\//:}

관련 정보