大括号语法$ {var%。*}是什么意思?

时间:2012-03-04 21:31:31

标签: bash syntax

我正在审核一些旧代码并遇到了这种语法:

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

我找到的唯一信息是指一个命令列表,但这只是一个变量。 这个大括号语法在bash中意味着什么?

3 个答案:

答案 0 :(得分:28)

在此上下文中,它是parameter substitution

${variable%.*}表示法取值$variable,从值的尾部剥离模式.* - 助记符:percenT在尾部有一个't' - 和给出结果。 (相比之下,${variable#xyz}表示从变量值的头部删除xyz - 助记符:哈希在头部有一个'h'。)

假设:

downloadFileName=abc.tar.gz

评估extractDir="${downloadFileName%.*}-tmp"会产生相当于:

extractDir="abc.tar-tmp"

%的备选表示法:

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

将产生相当于:

extractDir="abc-tmp"

%%表示删除最长的尾巴;相应地,##表示删除最长的匹配头。

答案 1 :(得分:5)

表示会发生parameter expansion

答案 2 :(得分:0)

在扩展与某些不是变量的文本相邻的环境变量时使用它,因此shell不会在变量名中包含所有这些变量。