una tag que por palabra lineas linea empiezan eliminar comando caracter borrar archivo bash shell arguments rsync stripslashes

bash - tag - ¿Cuál es la forma más sencilla de eliminar una barra inclinada de cada parámetro?



sed eliminar lineas que empiezan por (6)

realpath resuelve el camino dado. Entre otras cosas, también elimina las barras posteriores. Use -s para evitar los siguientes enlaces sim.

DIR=/tmp/a/// echo $(realpath -s $DIR) # output: /tmp/a

¿Cuál es la forma más sencilla de eliminar una barra inclinada de cada parámetro en la matriz ''$ @'', de modo que rsync los directorios por nombre?

rsync -a --exclude=''*~'' "$@" "$dir"

El título ha sido cambiado para aclaración. Para comprender los comentarios y la respuesta sobre las barras diagonales múltiples, consulte el historial de edición.


Puede usar la expansión ${parameter%word} que se detalla aquí . Aquí hay un script de prueba simple que demuestra el comportamiento:

#!/bin/bash # Call this as: # ./test.sh one/ two/ three/ # # Output: # one two three echo ${@%/}


La respuesta aceptada cortará UNA barra inclinada.

Una forma de recortar varias barras inclinadas es la siguiente:

VALUE=/looks/like/a/path/// TRIMMED=$(echo $VALUE | sed ''s:/*$::'') echo $VALUE $TRIMMED

Qué salidas:

/looks/like/a/path/// /looks/like/a/path


En zsh puedes usar el modificador :a .

export DIRECTORY=''/some//path/name//'' echo "${DIRECTORY:a}" => /some/path/name

Esto actúa como realpath pero no falla con archivos / directorios perdidos como argumento.


Esto funciona para mí: ${VAR%%+(/)}

Como se describe aquí http://wiki.bash-hackers.org/syntax/pattern

Puede ser necesario configurar la opción de shell extglob. No puedo verlo habilitado para mí, pero todavía funciona


FYI, agregué estas dos funciones a mi .bash_profile basado en las respuestas encontradas en SO. Como dijo Chris Johnson, todas las respuestas que usan ${x%/} eliminan solo una barra inclinada, estas funciones harán lo que dicen, espero que esto sea útil.

rem_trailing_slash() { echo $1 | sed ''s///*$//g'' } force_trailing_slash() { echo $(rem_trailing_slash $1)/ }