【发布时间】:2010-12-23 08:02:04
【问题描述】:
Bash 自动完成在目录名称的末尾附加一个 /。我怎样才能从位置参数中去掉它?
#!/bin/sh
target=$1
function backup(){
date=`date "+%y%m%d_%H%M%S"`
PWD=`pwd`
path=$PWD/$target
tar czf /tmp/$date$target.tar.gz $path
}
backup
【问题讨论】:
Bash 自动完成在目录名称的末尾附加一个 /。我怎样才能从位置参数中去掉它?
#!/bin/sh
target=$1
function backup(){
date=`date "+%y%m%d_%H%M%S"`
PWD=`pwd`
path=$PWD/$target
tar czf /tmp/$date$target.tar.gz $path
}
backup
【问题讨论】:
使用target=${1%/}
请参阅此the parameter substitution of this bash scripting guide 了解更多信息。
【讨论】:
我认为规范化路径的更好解决方案是realpath $path 或-m 选项(如果不存在)。
此解决方案自动删除不必要的斜线并添加密码
【讨论】:
readlink -f 比realpath 更便携。对于附加/替代选项:linux.die.net/man/1/readlink
target=$(realpath -L --relative-base . $1)
小心,bash3 向 bash 添加了与 perl 类似的正则表达式。提到的指南涵盖了这一点以及 official guide at GNU ,但并非所有参考资料都如此。
将2.19/* 替换为2.19。
VER="2.19/foo-bar"
NEWVER=${VER%/*}
【讨论】: