Como posso colocar essa manipulação de string em um loop para que continue até que não haja mais nada a fazer?

Como posso colocar essa manipulação de string em um loop para que continue até que não haja mais nada a fazer?

Estou criando um script para remover todas as partes de um URL que não seja "domain.com". Consegui aproveitar ao máximo, mas estou tendo um problema com subpastas. Aqui está o meu código:

domain=$1

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

O problema é que para cada subpasta que desejo cortar, preciso criar outra regra "inp="${inp%/*}"". Atualmente, o código lá em cima só pode cortar um nível, então funcionaria em "www.google.com/hello", mas não em www.google.com/hello/there". Eu poderia adicionar duas das regras à conta para isso, mas não quero ter que repetir a regra 20 vezes para dar conta de tudo.

Existe alguma maneira de colocar isso em um loop que detecte quando for concluído ou uma maneira melhor de fazer isso?

Responder1

No lugar de

 inp="${inp%/*}"

Tentar:

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

Ambas as substituições de shell são exemplos deremoção de sufixo. O %formulário exclui omais curtosufixo correspondente. Em contrapartida, a %%forma elimina omais longosufixo correspondente. Então, se você quiser que o primeiro /e tudo depois dele seja removido, use %%/*.

Documentação

De man bash:

${parâmetro%%palavra}
${parâmetro%%palavra}
Remova o padrão de sufixo correspondente. A palavra é expandida para produzir um padrão, assim como na expansão do nome do caminho. Se o padrão corresponder a uma parte final do valor expandido do parâmetro, então o resultado da expansão será o valor expandido do parâmetro com o padrão de correspondência mais curto (o %caso) ou o padrão de correspondência mais longo (o %%caso) excluído. Se o parâmetro for @ ou *, a operação de remoção de padrão será aplicada a cada parâmetro posicional por vez e a expansão será a lista resultante. Se o parâmetro for uma variável de matriz com @ ou *, a operação de remoção de padrão será aplicada a cada membro da matriz por vez e a expansão será a lista resultante.

informação relacionada