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

Mat*_*ris 16 syntax bash

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

extractDir="${downloadFileName%.*}-tmp"
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*ler 34

在这种情况下,它是参数替换.

${variable%.*}表示法是指取的值$variable,剥离所述图案.*从所述值的尾-助记符:百分比具有在尾一个"T" -和得到的结果.(相比之下,${variable#xyz}意味着xyz从变量值的头部移除- 助记符:哈希在头部有一个'h'.)

鉴于:

downloadFileName=abc.tar.gz
Run Code Online (Sandbox Code Playgroud)

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

extractDir="abc.tar-tmp"
Run Code Online (Sandbox Code Playgroud)

双重替代符号%:

extractDir="${downloadFileName%%.*}-tmp"
Run Code Online (Sandbox Code Playgroud)

会产生相当于:

extractDir="abc-tmp"
Run Code Online (Sandbox Code Playgroud)

%%装置取出最长可能的尾; 相应地,##意味着移除最长的匹配头.


Ign*_*ams 5

它表示将发生参数扩展.