首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只按主版本号和次版本号匹配macOS版本号

只按主版本号和次版本号匹配macOS版本号
EN

Stack Overflow用户
提问于 2017-03-17 15:40:39
回答 2查看 304关注 0票数 1

试图处理10.12.3的结果--当操作系统有一个可选的第三个数值要考虑时,我将如何编码?当然,这种情况经常发生变化,所以我不想寻找扩展的更新。主要操作系统10.12,10.11,10.10等等。

代码语言:javascript
复制
   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

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-17 15:51:11

您可以接受变量$osv,只保留前两个字段(假设字段是用.分隔的),并在if/else语句中使用结果:

代码语言:javascript
复制
v=$(echo "$osv" | awk -F. 'BEGIN{OFS="."}{print $1,$2}')

所以,如果$osv10.12.3,那么v就是10.12。如果$osv仅仅是10.12,那么v也将等于这个值。

票数 1
EN

Stack Overflow用户

发布于 2017-03-17 15:55:20

使用=~,Bash的正则匹配操作符,在[[ ... ]]内部

代码语言:javascript
复制
if [[ $osv =~ ^10\.12(\.?|$) ]]; # ...

例如,这与10.1210.12.3相匹配。

通过一些复制,您还可以在case语句中使用glob样式的模式,这在您的情况下可能是最好的选择:

代码语言:javascript
复制
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

注意:

代码语言:javascript
复制
- 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).

  • 相反,regexes只能用于[[ ... ]]内部与=~运算符的字符串匹配。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42861691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档