
Estoy creando una secuencia de comandos para eliminar todas las partes de una URL que no sea "dominio.com". Logré aprovechar al máximo, pero tengo un problema con las subcarpetas. Aquí está mi código:
domain=$1
inp="${domain//http:'//'}"
inp="${inp//https:'//'}"
inp="${inp//www.}"
inp="${inp%/*}"
El problema es que por cada subcarpeta que quiero recortar, necesito crear otra regla "inp="${inp%/*}"". Actualmente, el código que aparece allí solo puede eliminar un nivel, por lo que funcionaría en "www.google.com/hello", pero no en www.google.com/hello/there". Podría agregar dos de las reglas a la cuenta. para eso, pero no quiero tener que repetir la regla 20 veces para dar cuenta de todo.
¿Hay alguna manera de incluir esto en un bucle que detecte cuándo está terminado, o una mejor manera de hacerlo?
Respuesta1
En lugar de
inp="${inp%/*}"
Intentar:
inp="${inp%%/*}"
Ambas sustituciones de caparazón son ejemplos deeliminación de sufijos. El %
formulario elimina elmás cortosufijo coincidente. Por el contrario, el %%
formulario elimina lamás largosufijo coincidente. Entonces, si desea /
eliminar el primero y todo lo posterior, use %%/*
.
Documentación
De man bash
:
${parámetro%palabra}
${parámetro%%palabra}
Elimine el patrón de sufijo coincidente. La palabra se expande para producir un patrón tal como en la expansión del nombre de ruta. Si el patrón coincide con una parte final del valor expandido del parámetro, entonces el resultado de la expansión es el valor expandido del parámetro con el patrón coincidente más corto (el%
caso) o el patrón coincidente más largo (el%%
caso) eliminado. Si el parámetro es @ o *, la operación de eliminación del patrón se aplica a cada parámetro posicional por turno y la expansión es la lista resultante. Si el parámetro es una variable de matriz con el subíndice @ o *, la operación de eliminación del patrón se aplica a cada miembro de la matriz por turno y la expansión es la lista resultante.