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
是否可以使用参数扩展来组合模式匹配运算符?
例如,给定变量 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