在bash中提取没有路径和扩展名的文件基本名称
这个问题在这里已经有了答案:
您不必调用外部basename
命令。 相反,您可以使用以下命令:
$ s=/the/path/foo.txt
$ echo ${s##*/}
foo.txt
$ s=${s##*/}
$ echo ${s%.txt}
foo
$ echo ${s%.*}
foo
请注意,此解决方案应适用于所有最近(2004年后)符合POSIX标准的shell(例如bash
, dash
, ksh
等)。
来源:Shell命令语言2.6.2参数扩展
更多关于bash的字符串操作:http://tldp.org/LDP/LG/issue18/bash.html
basename命令有两个不同的调用; 在其中一个,你指定的路径,在这种情况下,它给你最后一个组件,而在另一个,你也给一个后缀,它将被删除。 因此,您可以通过使用第二次调用基本名称来简化示例代码。 另外,请小心正确地引用以下内容:
fbname=$(basename "$1" .txt) echo "$fbname"
基本名称和剪辑的组合很好,即使在像.tar.gz
这样的双重结局的情况下:
fbname=$(basename "$fullfile" | cut -d. -f1)
如果这个解决方案比Bash参数扩展需要更少的算术功能,那将会很有趣。
链接地址: http://www.djcxy.com/p/57077.html上一篇: Extract file basename without path and extension in bash