type
status
date
slug
summary
tags
category
icon
password
菜单级别
Place
Verification
Owner
Shell 的参数扩展功能提供了强大的字符串处理能力,掌握这些技巧可以大大提高脚本编写效率。
${} 基本用法
标准变量引用
使用
${} 的优势:- 明确变量边界
- 避免变量名歧义
- 支持更复杂的参数扩展操作
示例:变量边界问题
字符串截取
从左边截取
从右边截取
# 和 ## 删除左边匹配
# 删除最短匹配(非贪婪)
## 删除最长匹配(贪婪)
实用示例:获取文件名
% 和 %% 删除右边匹配
% 删除最短匹配(非贪婪)
%% 删除最长匹配(贪婪)
实用示例:获取文件扩展名
记忆技巧
快速记忆:
-#在键盘上位于$的左边 → 从左边删除
-%在键盘上位于$的右边 → 从右边删除
- 单个符号(#或%)→ 最短匹配(非贪婪)
- 双个符号(##或%%)→ 最长匹配(贪婪)
:- 提供默认值(变量为空时)
基本语法
实用场景
运行示例:
:= 设置默认值(变量为空时)
:- 与 := 的区别
:+ 使用替代值(变量不为空时)
实用场景:条件标志
:? 显示错误信息(变量为空时)
运行示例:
用于必需参数检查
综合示例
示例 1:路径处理
示例 2:URL 处理
示例 3:配置管理
模式匹配通配符
在使用
#、##、%、%% 时,可以使用通配符:*匹配任意字符串
?匹配单个字符
[...]匹配字符集
快速参考表
语法 | 说明 | 变量为空时 | 变量不为空时 | 是否改变变量 |
${var:-default} | 提供默认值 | 返回 default | 返回 var 的值 | 否 |
${var:=default} | 设置默认值 | 设置并返回 default | 返回 var 的值 | 是 |
${var:+value} | 替代值 | 返回空 | 返回 value | 否 |
${var:?message} | 错误检查 | 显示 message 并退出 | 返回 var 的值 | 否 |
${var#pattern} | 删除左边最短匹配 | - | 删除并返回结果 | 否 |
${var##pattern} | 删除左边最长匹配 | - | 删除并返回结果 | 否 |
${var%pattern} | 删除右边最短匹配 | - | 删除并返回结果 | 否 |
${var%%pattern} | 删除右边最长匹配 | - | 删除并返回结果 | 否 |
总结
Shell 参数扩展是强大的文本处理工具,合理使用可以:
- 简化字符串操作
- 减少外部命令调用(如
sed、awk)
- 提高脚本性能
- 使代码更简洁易读
记住这些技巧,在处理文件路径、URL、配置参数等场景时会非常有用。
- 作者:Orz
- 链接:https://blog.1567890.xyz/learning/shell-parameter-expansion
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

