从 shell 脚本中文件的输入路径获取文件名

从 shell 脚本中文件的输入路径获取文件名

可能的重复:
从字符串中删除文件扩展名的最佳方法?

假设我有一个名为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

但绝对最好的方法是凯文上面描述的方法。

相关内容