🔧
Bash 参数展开
${var:-default} 等 Bash 参数展开速查。
本地处理 · 不上传
加载工具中…
相关:bash · 参数展开 · shell · 脚本
Bash 参数展开列出变量展开的各种语法,含默认值、字符串截取、替换与大小写转换。它能替代很多外部命令调用。
使用步骤
- 确定要做的是给默认值、截断还是替换
- 找到对应的 ${var...} 写法
- 注意 :- 与 - 的差别在于变量为空字符串时的行为
- 写进脚本后用 set -u 验证未定义变量是否被正确兜住
使用场景
- 为变量设置默认值
- 截取与替换字符串
- 提取路径中的文件名与扩展名
- 编写更高效的脚本
小贴士
- `${var:-默认值}` 在变量为空时使用默认值但不赋值,`${var:=默认值}` 则会同时赋值,两者用途不同。
- 参数展开在 shell 内部完成,比调用 sed、cut 之类的外部命令快得多,循环中差别尤其明显。
- `${var%.*}` 去掉最短的后缀匹配、`${var%%.*}` 去掉最长的,处理带多个点的文件名时结果完全不同。
常见问题
怎么给变量设默认值?
`${var:-默认值}` 在 var 为空时返回默认值但不改变 var;`${var:=默认值}` 会同时把默认值赋给 var。前者适合一次性使用,后者适合初始化。
怎么提取文件名和扩展名?
`${path##*/}` 取文件名(去掉最长的路径前缀),`${file%.*}` 取主名(去掉最短的扩展名后缀),`${file##*.}` 取扩展名。这比调用 basename 和 cut 快得多。
% 和 %% 有什么区别?
% 匹配最短的后缀,%% 匹配最长的。对 `a.tar.gz` 而言,`${f%.*}` 得到 a.tar,`${f%%.*}` 得到 a。井号的一对(# 和 ##)同理,只是从前缀开始匹配。
Bash 参数展开是免费的吗?
是。本站所有工具完全免费,无需注册登录、无广告干扰,打开即用。
使用Bash 参数展开,我的数据安全吗?
安全。该工具在你的浏览器本地完成处理,输入内容不会上传到服务器,隐私更有保障。