如果不存在,则添加后缀(bash)
如果字符串不存在的话,我正试图找到向字符串(在bash中)添加后缀的最佳方法 我首先想到的是:如果不存在,则添加后缀(bash),bash,variables,Bash,Variables,如果字符串不存在的话,我正试图找到向字符串(在bash中)添加后缀的最佳方法 我首先想到的是: case "$R" in *.git ) ;; * ) R=$R.git ;; esac 这很有效。但这很麻烦 然后想一想: R=${R%.git}.git 这是好的,紧凑,整洁 还有其他选择吗?有什么我应该知道的吗 [[ $r == *.git ]] || r+=.git 这将是我首选的方法 shopt -s extglob case $r in !(*.git)) r+=.g
case "$R" in
*.git ) ;;
* ) R=$R.git ;;
esac
这很有效。但这很麻烦
然后想一想:
R=${R%.git}.git
这是好的,紧凑,整洁
还有其他选择吗?有什么我应该知道的吗
[[ $r == *.git ]] || r+=.git
这将是我首选的方法
shopt -s extglob
case $r in !(*.git)) r+=.git; esac
可能是更好的案例
方法。如果确保R
已设置且不为空,则第二个方法可能足够好。其他可能性包括:
${r:+'declare'} r="${r%.git}.git"
r=${r%.git}.git ${r:+'true'}
对于POSIX SH,您的任一方法都很好,不过您应该考虑不使用所有的CAPS变量名。
他的原始生成“.git”;您的解决方案没有为我设置r
。@chepner这就是重点<代码>r=foo.gi${r:+声明r=${r%.git}.git};echo“$r”生成foo.gi.git
。但是,如果r为unset或null,则扩展将变为nothing,并且不会执行declare命令。这将防止在未设置为开始时设置r。如果您希望r
变成.git
,只有当r
为空但未取消设置时,才从扩展中删除冒号。+1谢谢-我没有想到r没有被设置。我的脚本确实以其他方式检查参数,但这是需要注意的。