我在审查我的一些旧代码时遇到了这种语法:
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/