试图处理10.12.3的结果--当操作系统有一个可选的第三个数值要考虑时,我将如何编码?当然,这种情况经常发生变化,所以我不想寻找扩展的更新。主要操作系统10.12,10.11,10.10等等。
if [ "$osv" = "10.12" ];
then
appi="Applications:App Store.app:Contents:Resources:AppIcon.icns"
elif [ "$osv" = "10.11" ];
then
appi="Applications:App Store.app:Contents:Resources:appStore.icns"
else
exit
fi谢谢。
发布于 2017-03-17 15:51:11
您可以接受变量$osv,只保留前两个字段(假设字段是用.分隔的),并在if/else语句中使用结果:
v=$(echo "$osv" | awk -F. 'BEGIN{OFS="."}{print $1,$2}')所以,如果$osv是10.12.3,那么v就是10.12。如果$osv仅仅是10.12,那么v也将等于这个值。
发布于 2017-03-17 15:55:20
使用=~,Bash的正则匹配操作符,在[[ ... ]]内部
if [[ $osv =~ ^10\.12(\.?|$) ]]; # ...例如,这与10.12和10.12.3相匹配。
通过一些复制,您还可以在case语句中使用glob样式的模式,这在您的情况下可能是最好的选择:
osv=$(sw_vers -productVersion) # yields, e.g., '10.12' or '10.12.3'
case $osv in
10.12|10.12.*)
appi="Applications:App Store.app:Contents:Resources:AppIcon.icns"
;;
10.11|10.11.*)
appi="Applications:App Store.app:Contents:Resources:appStore.icns"
;;
*)
exit
esac注意:
- conceptually simpler, but much less powerful than _regexes_ (regular expressions).
- can be used for string matching on the RHS of `==` inside `[[ ... ]]` as well as in `case` statements (see above; inside `case`, their use is even POSIX-compliant).
[[ ... ]]内部与=~运算符的字符串匹配。https://stackoverflow.com/questions/42861691
复制相似问题