Para eliminar una barra inclinada final si hay una, puede usar la construcción de expansión del parámetro de eliminación de sufijo presente en todos los shells de estilo POSIX:
x=${x%/}
Hay algunas complicaciones. Esto solo elimina una barra oblicua, así que si comenzaste a/b/c//
, terminarás con una barra oblicua. Además, si la ruta original era /
, debe mantener la barra diagonal. Aquí hay una solución más compleja que se ocupa de estos casos:
case $x in
*[!/]*/) x=${x%"${x##*[!/]}"};;
*[/]) x="/";;
esac
Alternativamente, en ksh o en bash after shopt -s extglob
:
[[ x = *[!/] ]] || x=${x%%*(/)}
Tenga en cuenta que en muchos casos, no importa que haya una barra inclinada final. Importa si el argumento es un enlace simbólico a un directorio: con una barra inclinada final, el argumento designa el directorio, mientras que sin una barra inclinada final, el argumento designa el enlace simbólico mismo. También es importante con algunos otros programas, por ejemplo, el argumento de origen rsync
se trata de manera diferente dependiendo de la presencia de una barra inclinada final.
/
.