bash 参数扩展和组合模式匹配运算符

bash parameter expansion and combining pattern-matching operators

是否可以使用参数扩展来组合模式匹配运算符?

例如,给定变量 test=/home/archie/.vimrc.bak

我可以用 echo ${test##*/} 删除从 $test 开始的最长匹配:

>> echo ${test##*/}
.vimrc.bak

我也可以用echo ${test%.*}删除$test结尾的最短匹配:

>> echo ${test%.*}
/home/archie/.vimrc

有没有办法把两个模式匹配算子结合起来输出.vimrc

你不能在一个扩展中做到这一点,但你可以用两个来做到:

$ test=/home/archie/.vimrc.bak; tmp="${test%.*}"; name="${tmp##*/}"; echo "$name"
.vimrc