如何从完整路径中提取不带扩展名的文件名?


10

我正在尝试纠正我的第一个bash脚本,并且有一次将文件名传递给该脚本$1。我需要提取不带扩展名的文件名。
当前,我假设所有扩展名都是三个字母,所以我删除了最后4个字符以获取文件名:

a="${1:0:-4}"

但是我需要能够使用具有三个以上字符的扩展程序,例如%~n1在Windows中。
有什么方法可以从参数中提取不带扩展名的文件名?


Answers:


27

在bash中执行此操作的通常方法是使用参数扩展。(请参见bash手册页并搜索“参数扩展”。)

a=${1%.*}

%表示一切匹配以下的图案(.*从右边),使用最短的匹配可能的,要被从参数中删除$1。在这种情况下,您不需要在表达式两边加上双引号(“)。


1
文件模式通常是这样的:“ Something.eng.ext”。显然,在这种情况下,ext是扩展名,但是使用$ {1%。*}将仅返回“ Something”部分,对吗?
user304822 2014年

2
${1%.*}将返回Something.eng。如果要删除第一个右边的所有内容,.包括.use ${1%%.*},它将返回Something
garyjohn 2014年


0

一衬上猛砸,而无需使用基本名称

$ s=/the/path/foo.txt
$ echo "$(b=${s##*/}; echo ${b%.*})"
foo
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.