如果不存在则添加后缀(bash)

Ste*_*lly 4 variables bash

我正在尝试找到向字符串(在 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)

这很好、紧凑、整洁。

还有其他选择吗?有什么我应该注意的问题吗?

orm*_*aaj 5

[[ $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,两种方法都可以,但您应该考虑不使用全大写变量名。