从'$ @'数组中的每个参数中删除尾部斜杠的最简单方法是什么,以便rsync
按名称复制目录?
rsync -a --exclude='*~' "$@" "$dir"
标题已更改以澄清。要了解有关多个尾部斜杠的注释和答案,请参阅编辑历史记录。
答案 0 :(得分:112)
您可以使用详细here的${parameter%word}
扩展。这是一个演示行为的简单测试脚本:
#!/bin/bash
# Call this as:
# ./test.sh one/ two/ three/
#
# Output:
# one two three
echo ${@%/}
答案 1 :(得分:17)
接受的答案将削减一个尾随斜线。
修剪多个尾部斜杠的一种方法是这样的:
VALUE=/looks/like/a/path///
TRIMMED=$(echo $VALUE | sed 's:/*$::')
echo $VALUE $TRIMMED
哪个输出:
/looks/like/a/path/// /looks/like/a/path
答案 2 :(得分:16)
这对我有用:${VAR%%+(/)}
如此处所述http://wiki.bash-hackers.org/syntax/pattern
可能需要设置shell选项extglob。我无法看到它为我启用但它仍然有效
答案 3 :(得分:5)
realpath
解析了路径。除此之外,它还删除了尾部斜杠。使用-s
来阻止关注simlink
DIR=/tmp/a///
echo $(realpath -s $DIR)
# output: /tmp/a
答案 4 :(得分:4)
在 zsh 中,您可以使用:a
修饰符。
export DIRECTORY='/some//path/name//'
echo "${DIRECTORY:a}"
=> /some/path/name
这与realpath
类似,但不会因缺少文件/目录而失败。
答案 5 :(得分:0)
不是最漂亮的方式,但又快又简单。
我只是添加了一个斜杠并删除了所有双打。假设在其他地方找不到这种模式。
WORD="abc/"
WORD=$WORD'/'
WORD=`echo $WORD | sed s/'\/\/'/''/g`
echo $WORD