在bash中提取没有路径和扩展名的文件基本名称

这个问题在这里已经有了答案:

  • 在Bash中提取文件名和扩展名35个答案

  • 您不必调用外部basename命令。 相反,您可以使用以下命令:

    $ s=/the/path/foo.txt
    $ echo ${s##*/}
    foo.txt
    $ s=${s##*/}
    $ echo ${s%.txt}
    foo
    $ echo ${s%.*}
    foo
    

    请注意,此解决方案应适用于所有最近(2004年后)符合POSIX标准的shell(例如bashdashksh等)。

    来源: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

    下一篇: How to trim whitespace from a Bash variable?