이 문자열 조작을 루프에 넣어 더 이상 할 일이 없을 때까지 계속되도록 하려면 어떻게 해야 합니까?

이 문자열 조작을 루프에 넣어 더 이상 할 일이 없을 때까지 계속되도록 하려면 어떻게 해야 합니까?

"domain.com" 이외의 URL의 모든 부분을 제거하는 스크립트를 만들고 있습니다. 대부분의 작업을 수행했지만 하위 폴더에 문제가 발생했습니다. 내 코드는 다음과 같습니다.

domain=$1

inp="${domain//http:'//'}"
inp="${inp//https:'//'}"
inp="${inp//www.}"
inp="${inp%/*}"

문제는 잘라내고 싶은 모든 하위 폴더에 대해 또 다른 "inp="${inp%/*}"" 규칙을 만들어야 한다는 것입니다. 현재 위의 코드는 한 수준만 잘라낼 수 있으므로 "www.google.com/hello"에서는 작동하지만 www.google.com/hello/there"에서는 작동하지 않습니다. 계정에 두 가지 규칙을 추가할 수 있습니다. 하지만 모든 것을 설명하기 위해 규칙을 20번 반복하고 싶지는 않습니다.

완료 시점을 감지하는 루프에 이를 던질 수 있는 방법이 있습니까? 아니면 더 좋은 방법이 있습니까?

답변1

대신에

 inp="${inp%/*}"

노력하다:

 inp="${inp%%/*}"

이 두 가지 쉘 대체는 모두 다음의 예입니다.접미사 제거. 양식 %에서 다음을 삭제합니다.가장 짧은일치하는 접미사. 대조적으로, %%양식은 다음을 제거합니다.가장 긴일치하는 접미사. 따라서 첫 번째 항목 /과 그 이후의 모든 항목을 제거 하려면 %%/*.

선적 서류 비치

에서 man bash:

${매개변수%word}
${매개변수%%word}
일치하는 접미사 패턴을 제거합니다. 경로 이름 확장과 마찬가지로 단어가 확장되어 패턴을 생성합니다. 패턴이 확장된 매개변수 값의 후행 부분과 일치하는 경우 확장 결과는 가장 짧은 일치 패턴(케이스 %) 또는 가장 긴 일치 패턴( %%케이스)이 삭제된 매개변수의 확장된 값입니다. 매개변수가 @ 또는 *인 경우 각 위치 매개변수에 패턴 제거 작업이 차례로 적용되고 확장된 결과 목록이 됩니다. 매개변수가 @ 또는 *가 붙은 배열 변수인 경우 패턴 제거 작업은 배열의 각 멤버에 차례로 적용되고 확장은 결과 목록입니다.

관련 정보