🔧

Bash 参数展开

${var:-default} 等 Bash 参数展开速查。

本地处理 · 不上传

加载工具中…

相关:bash · 参数展开 · shell · 脚本

Bash 参数展开列出变量展开的各种语法,含默认值、字符串截取、替换与大小写转换。它能替代很多外部命令调用。

使用步骤

  1. 确定要做的是给默认值、截断还是替换
  2. 找到对应的 ${var...} 写法
  3. 注意 :- 与 - 的差别在于变量为空字符串时的行为
  4. 写进脚本后用 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 参数展开,我的数据安全吗?

安全。该工具在你的浏览器本地完成处理,输入内容不会上传到服务器,隐私更有保障。