$ {2%.*}是什么意思?

Lee*_* Xu 2 linux bash shell

我正在阅读一个bash脚本,它在输入中有两个参数,但我无法弄清楚是什么

${2%.*}
Run Code Online (Sandbox Code Playgroud)

确切地说,有人可以解释我的花括号是什么,2,%,"." 和*指两个?

谢谢

che*_*ner 5

$2是传递给程序的第二个参数.也就是说,如果你的脚本是运行的

myscript foo.txt bar.jpg
Run Code Online (Sandbox Code Playgroud)

$2会有价值bar.jpg.

%操作者除去了来自匹配以下图案中的值的后缀..*匹配句点(.)后跟零个或多个字符.放在一起,表达式从值中删除单个扩展名.使用上面的例子,

$ echo ${2%.*}
bar
Run Code Online (Sandbox Code Playgroud)

PS也许值得注意的是,%将删除以下模式的最短匹配:因此,如果$2是例如bar.jpg.xz,那么${2%.*}将是bar.jpg.(相反,%%运算符将删除模式的最长匹配,因此bar两个示例中都会有$ {2 %%.*} .)