Каков самый простой способ удалить косую черту из каждого параметра?
каков самый простой способ удалить косую черту из каждого параметра в массиве'$@', так что rsync копирует каталоги по имени?
rsync -a --exclude='*~' "$@" "$dir"
название было изменено для уточнения. Чтобы понять комментарии и ответ о нескольких конечных косых чертах, см. историю редактирования.
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для предотвращения следующих simlinksDIR=/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