2014-09-08 3 views

답변

12

당신이 다른에서 하나의 문자열을 제거 할 수 있습니다

echo "${string1#"$string2"}" 

참조 : man bash에서

$ string1="a/b/c/d/e/f" 
$ string2="a/b/c/d" 
$ echo "${string1#"$string2"}" 
/e/f 

->Shell parameter expansion :

$를 {매개 변수 # 단어 }

$ {012 # 매개 변수 ## word}

단어가 확장되어 파일 이름이 확장과 같이 나타납니다. 패턴이 매개 변수의 확장 된 값 의 시작과 일치하는 경우 확장의 결과는 가장 짧은 패턴 ('#'경우) 또는 의 가장 긴 일치하는 패턴 ('##')의 확장 된 값 입니다. '사례)가 삭제되었습니다. 공백


:

$ string1="hello/i am here/foo/bar" 
$ string2="hello/i am here/foo" 
$ echo "${string1#"$string2"}" 
/bar 

"깨끗한"여러 슬래시, 당신은 Roberto Reale's suggestion에 따라 같은 실제 경로 문자열 비교를 할 수 있도록 readlink -m와 경로를 정규화 할 수 있습니다하려면 :

$ string1="https://stackoverflow.com/a///b/c//d/e/f/" 
$ readlink -m $string1 
/a/b/c/d/e/f 
+0

하지만 경로에 공백이 있으면 작동하지 않습니다. 맞습니까? – Pithikos

+1

공백으로 잘 작동합니다. "word"에서'$ string2'의 사용법은 globbing을 막기 위해 인용되어야합니다. –

+0

@Pithikos 아니, 그것은 작동합니다. 내 업데이 트를 확인, 그것이 도움이되기를 바랍니다. – fedorqui

관련 문제