从每个参数中删除尾部斜杠的最简单方法是什么?

时间:2012-01-26 13:24:35

标签: bash shell arguments rsync stripslashes

从'$ @'数组中的每个参数中删除尾部斜杠的最简单方法是什么,以便rsync按名称复制目录?

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

标题已更改以澄清。要了解有关多个尾部斜杠的注释和答案,请参阅编辑历史记录。

6 个答案:

答案 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