Каков самый простой способ удалить косую черту из каждого параметра?



каков самый простой способ удалить косую черту из каждого параметра в массиве'$@', так что rsync копирует каталоги по имени?



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




название было изменено для уточнения. Чтобы понять комментарии и ответ о нескольких конечных косых чертах, см. историю редактирования.

623   6  

6 ответов:

можно использовать ${parameter%word} детальное расширение здесь. Вот простой тестовый скрипт, который демонстрирует поведение:

#!/bin/bash

# Call this as:
#   ./test.sh one/ two/ three/ 
#
# Output:
#  one two three

echo ${@%/}

это работает для меня: ${VAR%%+(/)}

как описано здесь http://wiki.bash-hackers.org/syntax/pattern

может потребоваться установить параметр оболочки extglob. Я не вижу, что он включен для меня, но он все еще работает

принятый ответ будет обрезать одну косую черту.

один из способов обрезать несколько конечных косых черт выглядит так:

VALUE=/looks/like/a/path///

TRIMMED=$(echo $VALUE | sed 's:/*$::')

echo $VALUE $TRIMMED

выходы:

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

на zsh можно использовать :a модификатор.

export DIRECTORY='/some//path/name//'

echo "${DIRECTORY:a}"

=> /some/path/name

Это действует как realpath но не терпит неудачу с отсутствующими файлами / каталогами в качестве аргумента.

realpath разрешения данного пути. Помимо прочего, он также удаляет конечные косые черты. Используйте -s для предотвращения следующих simlinks

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

к вашему сведению, я добавил Эти две функции для меня .bash_profile на основе ответов, найденных на SO. Как сказал Крис Джонсон, все ответы с помощью ${x%/} удалить только одну косую черту, эти функции будут делать то, что они говорят, надеюсь, что это полезно.

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

force_trailing_slash() {
    echo $(rem_trailing_slash )/
}

Comments

    Ничего не найдено.