我正在阅读一个bash脚本,它在输入中有两个参数,但我无法弄清楚
是什么${2%.*}
确切地说,有人可以解释我的花括号是什么,2,%,“。” *是指两个?
由于
答案 0 :(得分:5)
$2
是传递给程序的第二个参数。也就是说,如果你的脚本是用
myscript foo.txt bar.jpg
$2
的值为bar.jpg
。
%
运算符从与以下模式匹配的值中删除后缀。 .*
匹配句点(.
),后跟零个或多个字符。放在一起,表达式从值中删除单个扩展名。使用上面的例子,
$ echo ${2%.*}
bar
P.S。或许值得注意的是,%
将删除以下模式的最短匹配:因此如果$2
例如bar.jpg.xz
,那么${2%.*}
将是bar.jpg
。 (相反,%%
运算符将删除模式的最长匹配,因此在两个示例中$ {2 %%。*}都为bar
。)