尝试处理10.12.3的结果 - 当操作系统有可选的第三个数值时,我将如何编码?当然,这种情况经常发生变化,所以我不想寻找更新的更新。只是主OS 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
感谢。
答案 0 :(得分:2)
在=~
内使用[[ ... ]]
,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
注意:
Patterns(也用于globbing)是:
概念上更简单,但功能远不如 regexes (正则表达式)。
可用于==
[[ ... ]]
内case
的RHS以及case
语句中的字符串匹配(参见上文; [[ ... ]]
内部,其使用甚至符合POSIX标准。)
相比之下, regexes 只能用于=~
内{{1}}运算符的字符串匹配。
答案 1 :(得分:1)
您可以使用变量$osv
,仅保留前两个字段(假设字段以.
分隔),并使用if/else
语句中的结果:
v=$(echo "$osv" | awk -F. 'BEGIN{OFS="."}{print $1,$2}')
因此如果$osv
为10.12.3
,v
将为10.12
。如果$osv
仅为10.12
,则v
也将等于此值。