如何将提取RTM信息的两行Bash命令合并为单行?
单行实现方法
你可以用以下几种方式把命令合并成单行,避开Bash参数扩展嵌套的限制:
使用awk处理(推荐):
awk能直接按等号分割行,精准提取目标字段:rtm=$(unzip -p any.zip VENDOR/build.prop | awk -F= '/ro.vendor.build.id/ {print $2}')-F=指定以等号作为字段分隔符,匹配到包含ro.vendor.build.id的行后,直接打印第二列就是你要的RTM值。使用sed替换:
通过sed把目标行的前缀部分清空,只保留对应的值:rtm=$(unzip -p any.zip VENDOR/build.prop | sed -n 's/ro.vendor.build.id=//p')-n表示只输出处理后的匹配行,s/ro.vendor.build.id=//p会把行里的键名和等号替换为空,再打印结果。分号分隔原命令(简单直接):
如果不想用额外文本处理工具,也可以把原来的两行用分号连在同一行执行:rtm=$(unzip -p any.zip VENDOR/build.prop | grep "ro.vendor.build.id"); rtm=${rtm#*=}
Bash确实不支持${$(command)#*=}这种嵌套参数扩展,所以要么用文本处理工具在管道里直接提取值,要么用分号把两个赋值命令串联执行。
内容的提问来源于stack exchange,提问作者Sev
相关产品推荐
相关产品推荐

