Как мне поместить эту манипуляцию со строками в цикл, чтобы она продолжалась до тех пор, пока ничего не останется делать?

Как мне поместить эту манипуляцию со строками в цикл, чтобы она продолжалась до тех пор, пока ничего не останется делать?

Я создаю скрипт для удаления всех частей URL, кроме "domain.com". Мне удалось удалить большую часть, но у меня возникла проблема с подпапками. Вот мой код:

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:

${параметр%слово}
${параметр%%слово}
Удалить соответствующий шаблон суффикса. Слово расширяется для создания шаблона, как и при расширении имени пути. Если шаблон соответствует завершающей части расширенного значения параметра, то результатом расширения является расширенное значение параметра с удаленным самым коротким совпадающим шаблоном (регистр %) или самым длинным совпадающим шаблоном (регистр %%). Если параметр равен @ или *, операция удаления шаблона применяется к каждому позиционному параметру по очереди, а расширение представляет собой результирующий список. Если параметр является переменной массива, индексированной @ или *, операция удаления шаблона применяется к каждому члену массива по очереди, а расширение представляет собой результирующий список.

Связанный контент