可能的重复:
从字符串中删除文件扩展名的最佳方法?
假设我有一个名为script.sh
在外壳中我输入
script.sh ../folder/file.py
在那个文件中我知道echo $1
会输出../folder/file.py
但是有没有办法只获取不带扩展名的文件名...... file
?
答案1
BASH 有许多字符串运算符您可能想在此处使用,但我不知道如何仅用一个语句来完成此操作,因此您可以使用两个语句或一个子 shell:
echo `basename ${1%.py}`
或者,更一般地说,
echo `basename ${1%.*}`
或者,使用临时变量:
FILE=${1##*/}
echo ${FILE%.*}
我想,只要您使用子外壳,sed
也可以工作。
echo `echo $1 | sed 's/.*\/\([^/]*\)\(\.[^./]*\)\?/\1/'`
这是一个有点难看的表达式,但是如果您对输入做出一些假设,它就可以被清除。
答案2
如果您的扩展名始终由点分隔并且文件名中没有点,您可以使用简单的方法:
echo $(basename $1) | cut -d. -f1
但绝对最好的方法是凯文上面描述的方法。