我正在尝试找到向字符串(在 bash 中)添加后缀(如果它尚不存在)的最佳方法。
我首先想到的是:
case "$R" in
*.git ) ;;
* ) R=$R.git ;;
esac
Run Code Online (Sandbox Code Playgroud)
这有效。但比较麻烦。
然后想了想:
R=${R%.git}.git
Run Code Online (Sandbox Code Playgroud)
这很好、紧凑、整洁。
还有其他选择吗?有什么我应该注意的问题吗?
[[ $r == *.git ]] || r+=.git
Run Code Online (Sandbox Code Playgroud)
将是我的首选方法。
shopt -s extglob
case $r in !(*.git)) r+=.git; esac
Run Code Online (Sandbox Code Playgroud)
可能是一个更好的case方法。如果确保已R设置且不为空,那么您的第二种方法可能就足够好了。其他可能性包括:
${r:+'declare'} r="${r%.git}.git"
r=${r%.git}.git ${r:+'true'}
Run Code Online (Sandbox Code Playgroud)
对于 POSIX sh,两种方法都可以,但您应该考虑不使用全大写变量名。