"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}
일치하는 접미사 패턴을 제거합니다. 경로 이름 확장과 마찬가지로 단어가 확장되어 패턴을 생성합니다. 패턴이 매개변수 확장 값의 후행 부분과 일치하는 경우 확장 결과는 가장 짧은 일치 패턴(대문자 및 소문자%
) 또는 가장 긴 일치 패턴(대문자 및 소문자 )이 제거된%%
매개변수 확장 값 입니다. 인수가 @ 또는 *인 경우 패턴 제거 작업이 각 위치 인수에 차례로 적용되고 확장이 결과 목록이 됩니다. 매개변수가 @ 또는 * 첨자가 붙은 배열 변수인 경우 패턴 제거 작업은 배열의 각 구성원에 차례로 적용되고 확장은 결과 목록입니다.