linux截取文件扩展名的原理
我在编写自己的Latex编译脚本la.sh的时候,取参数文件名的时候,这样处理:
1 | # 取命令行参数 |
其中最后一行取文件扩展名,当时是复制粘贴的,只知其然而不知其所以然。直到我找到这篇文章:
https://www.bookstack.cn/read/bash-tutorial/docs-string.md
摘取如下:
字符串头部的模式匹配
以下两种语法可以检查字符串开头,是否匹配给定的模式。如果匹配成功,就删除匹配的部分,返回剩下的部分。原始变量不会发生变化。
1 | # 如果 pattern 匹配变量 variable 的开头 |
字符串尾部的模式匹配
以下两种语法可以检查字符串结尾,是否匹配给定的模式。如果匹配成功,就删除匹配的部分,返回剩下的部分。原始变量不会发生变化。
1 | # 如果 pattern 匹配变量 variable 的结尾 |
Summary
- # 从左到右匹配
- % 从右到左匹配
- 一个字符是最小匹配(懒惰匹配), 两个字符为最大匹配(贪婪匹配)
- pattern 可以包含 * ? [ ]
那么取主文件名就可以这样
1 | firstname = ${filename%%.*} |
我在不明原理的情况下还这么写了:
1 | len=${#filename} |
绕个弯也可以啊。