1
我試圖找到添加後綴到字符串(在bash中)如果它不存在的最佳方法。如果不存在添加後綴(bash)
我第一次來到了這一點:
case "$R" in
*.git) ;;
*) R=$R.git ;;
esac
其中一期工程。但是很麻煩。
然後想到這點:
R=${R%.git}.git
這是很好的,緊湊而整齊。
是否有其他選擇?任何我應該知道的陷阱?
我試圖找到添加後綴到字符串(在bash中)如果它不存在的最佳方法。如果不存在添加後綴(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+=.git; esac
可能是一個更好的bash特定case
方法。
如果您可以保證R
已設置且不爲空,那麼您的第二種方法可能已足夠。
${r:+declare r=${r%.git}.git}
將是一個有趣的解決方法。對於POSIX sh,你的任何一種方式都可以,但是你應該考慮不使用全大寫變量名。
他的原創作品「.git」;您的解決方法不會爲我設置「r」。 – chepner
@chepner就是這一點。 'R = foo.gi; $ {r:+ declare r = $ {r%.git} .git}; echo「$ r」產生'foo.gi.git'。但是,如果r未設置或爲null,則擴展將變爲空,並且不執行declare命令。這可以防止r被設置爲開頭。如果你希望'r'變成'.git',只有'r'爲空而不是未設置,那麼從擴展中移除冒號。 – ormaaj
+1謝謝 - 我沒有想過R沒有設置。我的腳本以其他方式檢查參數,但這是需要注意的。 –