Lazy loaded image
Shell 参数扩展详解:${}、##、%%、:-、:+ 和 ? 的使用
字数 1673阅读时长 5 分钟
2025-11-27
2025-11-29
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 参数扩展是强大的文本处理工具,合理使用可以:
  • 简化字符串操作
  • 减少外部命令调用(如 sedawk
  • 提高脚本性能
  • 使代码更简洁易读
记住这些技巧,在处理文件路径、URL、配置参数等场景时会非常有用。
上一篇
Shell 正则匹配操作符 =~ 详解
下一篇
Linux systemctl 命令完全指南