从每个参数中删除尾部斜线的最简单方法是什么?
从'$ @'数组中的每个参数中删除一个斜线的最简单的方法是什么,以便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)/ }
realpath
parsing给定的path。 除此之外,它还可以去除尾部的斜杠。 使用-s
来防止下面的连接
DIR=/tmp/a/// echo $(realpath -s $DIR) # output: /tmp/a