2012-06-14 28 views
1

我試圖找到添加後綴到字符串(在bash中)如果它不存在的最佳方法。如果不存在添加後綴(bash)

我第一次來到了這一點:

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

其中一期工程。但是很麻煩。

然後想到這點:

R=${R%.git}.git 

這是很好的,緊湊而整齊。

是否有其他選擇?任何我應該知道的陷阱?

回答

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

將是我的首選方法。

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

可能是一個更好的bash特定case方法。

如果您可以保證R已設置且不爲空,那麼您的第二種方法可能已足夠。

${r:+declare r=${r%.git}.git} 

將是一個有趣的解決方法。對於POSIX sh,你的任何一種方式都可以,但是你應該考慮不使用全大寫變量名。

+0

他的原創作品「.git」;您的解決方法不會爲我設置「r」。 – chepner

+0

@chepner就是這一點。 'R = foo.gi; $ {r:+ declare r = $ {r%.git} .git}; echo「$ r」產生'foo.gi.git'。但是,如果r未設置或爲null,則擴展將變爲空,並且不執行declare命令。這可以防止r被設置爲開頭。如果你希望'r'變成'.git',只有'r'爲空而不是未設置,那麼從擴展中移除冒號。 – ormaaj

+0

+1謝謝 - 我沒有想過R沒有設置。我的腳本以其他方式檢查參數,但這是需要注意的。 –