如何在Bash中移除文件的所有扩展名(获取第一个点前内容)?
提取文件名中第一个点之前的部分
现有代码仅能移除最后一个扩展名:
x=./gandalf.tar.gz noext=${x%.*} echo $noext # 输出 ./gandalf.tar
如果需要获取第一个.之前的部分(无论后续有多少层扩展名,比如./gandalf.tar.a.b.c也要得到./gandalf),可以使用最长匹配的参数替换:
x=./gandalf.tar.gz noext=${x%%.*} echo $noext # 输出 ./gandalf x=./gandalf.tar.a.b.c noext=${x%%.*} echo $noext # 输出 ./gandalf
原理说明
${x%.*}:属于最短匹配删除,从字符串末尾匹配最短的.*,仅移除最后一个扩展名;${x%%.*}:属于最长匹配删除,从字符串末尾匹配最长的.*,会移除第一个.之后的所有内容,完全匹配你的需求。
内容的提问来源于stack exchange,提问作者Juergen
相关产品推荐
相关产品推荐

