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)/
}