我正在审核一些旧代码并遇到了这种语法:
extractDir="${downloadFileName%.*}-tmp"
我找到的唯一信息是指一个命令列表,但这只是一个变量。 这个大括号语法在bash中意味着什么?
答案 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不会在变量名中包含所有这些变量。