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

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

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

标题已经改变,以澄清。 要了解关于多个尾部斜线的评论和答案,请参阅编辑历史logging。

您可以使用此处详述的${parameter%word}扩展。 这是一个简单的testing脚本,演示了这个行为:

 #!/bin/bash # Call this as: # ./test.sh one/ two/ three/ # # Output: # one two three echo ${@%/} 

这适用于我: ${VAR%%+(/)}

正如这里所描述的http://wiki.bash-hackers.org/syntax/pattern

可能需要设置shell选项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一样,但是不会以缺less文件/目录作为参数而失败。

仅供参考,我基于在SO上find的答案将这两个函数添加到了我的.bash_profile 。 正如克里斯·约翰逊所说的,所有使用${x%/}答案只删除一个斜杠,这些函数将会做他们所说的,希望这是有用的。

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

realpathparsing给定的path。 除此之外,它还可以去除尾部的斜杠。 使用-s来防止下面的连接

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