bash - 花括号语法 ${var%.*} 是什么意思?

标签 bash syntax

我在审查我的一些旧代码时遇到了这种语法:

extractDir="${downloadFileName%.*}-tmp"

我在搜索时发现的唯一信息是指命令列表,但这只是一个变量。 这个花括号语法在 bash 中意味着什么?

最佳答案

在此上下文中,它是一个 parameter substitution .

${variable%.*} 符号表示取 $variable 的值,从尾部剥离模式 .*值的 - 助记符:百分比在尾部有一个“t” - 并给出结果。 (相比之下,${variable#xyz} 表示从变量值的头部移除 xyz——助记:哈希在头部有一个“h”。)

给定:

downloadFileName=abc.tar.gz

评估 extractDir="${downloadFileName%.*}-tmp" 产生等同于:

extractDir="abc.tar-tmp"

% 的替代符号:

extractDir="${downloadFileName%%.*}-tmp"

将产生相当于:

extractDir="abc-tmp"

%% 表示去掉尽可能长的尾部;相应地,##表示去掉最长的匹配头。

关于bash - 花括号语法 ${var%.*} 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9558986/

相关文章:

c# - 如何在 bash 命令启动后保持应用程序打开 C#

python - 将文件行读入 xargs 以实现并行 python 脚本

git - 无法在我的 git 提交消息中添加 "!"符号

python - 语法 ndarray[ :, list[i]] 在 python 中意味着什么?

bash - 如何使用 Unix 变量在 session {bash} 中设置和保留值

bash - 如何在Docker CLI中运行参数化的bash脚本

Haskell——有什么方法可以关闭 `deriving` 实例的可重新绑定(bind)语法?

变量声明中的 MySQL 语法错误

generics - 什么是 Vec<_>?

javascript - 为什么 JSON.parse 对引号如此挑剔?