선언한다고 가정해보자
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//\//:}