4

文字列にサフィックスがまだ存在しない場合は、(bashで)サフィックスを追加するための最良の方法を見つけようとしています。

私は最初にこれを思いついた:

case "$R" in
    *.git ) ;;
    * ) R=$R.git ;;
esac

どちらが機能しますか。しかし、面倒です。

次に、これについて考えました:

R=${R%.git}.git

これは素晴らしく、コンパクトできれいです。

他のオプションはありますか?知っておくべき落とし穴はありますか?

4

1 に答える 1

5
[[ $r == *.git ]] || r+=.git

私の好みの方法になります。

shopt -s extglob
case $r in !(*.git)) r+=.git; esac

より良いcase方法かもしれません。R2番目の方法は、それが設定されていてnullではないことが保証されている場合、おそらく十分です。その他の可能性は次のとおりです。

${r:+'declare'} r="${r%.git}.git"
r=${r%.git}.git ${r:+'true'}

POSIX sh の場合、どちらの方法でも問題ありませんが、すべて大文字の変数名を使用しないことを検討する必要があります。

于 2012-06-14T10:16:53.493 に答える