当前位置: 首页 > news >正文

Shell参数扩展语法解析

在Shell脚本中,${prop_file%/*} 是一种 参数扩展(Parameter Expansion) 语法,用于从字符串的 末尾(右侧) 删除匹配指定模式的最短部分。具体作用如下:


${prop_file%/*} 的含义:

  1. %:表示从字符串的 末尾(右侧) 开始删除。
  2. /*:匹配的模式,表示 一个斜杠 / 及其后面的任意字符* 是通配符)。
  3. 效果:删除变量 prop_file 值中 最后一个 / 及其右侧的所有内容(相当于获取文件路径的目录部分)。

示例解析:

假设 prop_file 的原始值为:

prop_file="vendor/bes/boards/best1700_ep/p62lte/src/etc/build.prop"

执行 ${prop_file%/*} 后:

echo "${prop_file%/*}"
# 输出:vendor/bes/boards/best1700_ep/p62lte/src/etc
  • 删除了末尾的 /build.prop(最后一个 / 及其右侧内容)。
  • 结果是原文件路径的 目录路径

在您代码中的用途:

[[ "$device" == "p62lte" ]] && prop_file="${prop_file%/*}/build_lte.prop"
  1. 条件判断:如果 device 的值为 "p62lte",则执行右侧操作。
  2. 操作逻辑
    • ${prop_file%/*}:获取原路径的目录部分(例如 vendor/bes/boards/best1700_ep/p62lte/src/etc)。
    • 拼接新文件名:${prop_file%/*}/build_lte.prop → 生成新路径 vendor/bes/boards/best1700_ep/p62lte/src/etc/build_lte.prop
  3. 目的:将原路径中的文件名 build.prop 替换为 build_lte.prop,保持目录结构不变。

类似语法对比:

语法方向匹配模式效果
${var%pattern}从末尾最短匹配删除末尾匹配的最短部分
${var%%pattern}从末尾最长匹配删除末尾匹配的最长部分
${var#pattern}从开头最短匹配删除开头匹配的最短部分
${var##pattern}从开头最长匹配删除开头匹配的最长部分

例如:

path="/home/user/file.txt"
echo ${path%/*}     # 输出: /home/user (删除末尾最短匹配 `/*`)
echo ${path%%/*}    # 输出: (空,删除末尾最长匹配 `/*` → 全部内容)
echo ${path#*/}     # 输出: home/user/file.txt (删除开头最短匹配 `*/`)
echo ${path##*/}    # 输出: file.txt (删除开头最长匹配 `*/` → 目录部分)

总结:

  • ${prop_file%/*} 用于提取文件路径的 目录部分(去掉最后一个 / 后的文件名)。
  • 在您的代码中,它实现了 动态修改文件路径,将文件名从 build.prop 替换为 build_lte.prop,同时保留原目录结构。
http://www.lqws.cn/news/480871.html

相关文章:

  • 量化-因子处理
  • 3D制作角色模型的教程-1
  • 支付宝携手HarmonyOS SDK实况窗,开启便捷停车生活
  • 【unitrix】 4.1 类型级加一操作(Add1.rs)
  • leetcode:面试题 08.06. 汉诺塔问题
  • 一次使用 RAFT 和 Qwen3 实现端到端领域RAG自适应
  • 如何仅用AI开发完整的小程序<4>—小程序页面创建与删除
  • 肖臻《区块链技术与应用》第六讲:比特币网络
  • Python 使用Gitlab Api
  • Javaweb - 4.1 JavaScript
  • (线性代数最小二乘问题)Normal Equation(正规方程)
  • Go语言--语法基础6--基本数据类型--数组类型(1)
  • rom定制系列------红米note11 5G版 MTK芯片强解bl锁修复bug 官方系统 面具root批量线刷版
  • C++结构体初始化与成员函数实现语法详解
  • python基础(for...else...)
  • 怎么让二级域名绑定到wordpesss指定的页面
  • python源码:执行pdf合并/分页/图片管理功能
  • Linux 下的 socket
  • 如何用AI开发完整的小程序<9>—UI自适应与游戏页优化
  • Docker 高级管理——容器通信技术与数据持久化
  • Neo4j 中存储和查询数组数据的完整指南
  • 删除node并且重装然后重装vue
  • day039-nginx配置补充
  • 从 Cluely 融资看“AI 协同开发”认证:软件考试应该怎么升级?
  • 【unitrix】 4.0 类型级数值表示系统(types.rs)
  • 如何用AI开发完整的小程序<7>—让AI微调UI排版
  • 深度解析云计算网络架构:VLAN+OVS+Bonding构建高可靠虚拟化平台
  • Redis-CPP 5大类型操作
  • 深入解析C#数组协变与克隆机制
  • c#websocket心跳包自定义实现,支持异步操作的取消