它叫Parameter Expansion。bash 参数扩展
${0%/*}所做的是,在从参数0(即调用脚本的路径)的末尾删除字符串/*后缀后,扩展参数0中包含的值。
因此,$0与${0}是相同的,这与其他任何论证一样,如$1,你可以把它写成${1}。正如我所说,$0是特殊的,因为它不是真正的论点,它总是存在的,代表脚本的名称。参数扩展在{}大括号内工作,%是参数扩展的一种类型。
%/*匹配/的最后一次出现,并删除该字符之后的任何内容(*表示任何内容)。看看这个简单的例子:
1 | $ var="foo/bar/baz" |
还有 OUTDIR=${OUTDIR#*=} cmd=${OUTDIR%=*} 等形式
提炼下记忆方式:
${变量名#(##)*分隔符}剔除首个(或最末个即最右端)分隔符左侧字串
${变量名%(%%)分隔符*}剔除首个(或最末个即最左端)分隔符右侧字串
${变量名/被替换字串/替换字串} 替换首个匹配
${变量名//被替换字串/替换字串} 替换所有匹配
关于#和%的另一种助记方法:
1.看键盘上的#$%键,# $ %
使用#就表明匹配方向是从左向右
使用%就表明匹配方向是从右向左
单个#或单个%表示非贪婪匹配,匹配最短的部分
两个#或两个%表示贪婪匹配,匹配最长的部分
最后,剔除匹配部分。(*和分隔符直接看作匹配模式即可)