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

2

Estou criando um script para remover todas as partes de um URL diferente de "domain.com". Consegui aproveitar ao máximo, mas estou com 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 eu queira recortar, preciso criar outra regra "inp=" $ {inp% / *} "". Atualmente, o código lá em cima só pode ser cortado em um nível, por isso 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 eu não quero ter que repetir a regra 20 vezes para explicar tudo isso.

Existe alguma maneira de lançar isso em um loop que possa detectar quando é feito, ou uma maneira melhor de fazer isso?

    
por Egrodo 16.05.2016 / 20:49

1 resposta

3

No lugar de

 inp="${inp%/*}"

Tente:

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

Ambas as substituições de shell são exemplos de remoção de sufixo . A forma % exclui o sufixo de correspondência menor . Por contraste, o formulário %% remove o sufixo de correspondência mais longo . Então, se você quiser o primeiro / e tudo após ele ser removido, use %%/* .

Documentação

De man bash :

${parameter%word}
${parameter%%word}
Remove matching suffix pattern. The word is expanded to produce a pattern just as in pathname expansion. If the pattern matches a trailing portion of the expanded value of parameter, then the result of the expansion is the expanded value of parameter with the shortest matching pattern (the % case) or the longest matching pattern (the %% case) deleted. If parameter is @ or *, the pattern removal operation is applied to each positional parameter in turn, and the expansion is the resultant list. If parameter is an array variable subscripted with @ or *, the pattern removal operation is applied to each member of the array in turn, and the expansion is the resultant list.

    
por 16.05.2016 / 21:07