基本名称和扩展名已剥离

时间:2017-02-03 01:25:39

标签: regex bash

我想得到一个变量的基名,它总是一个带扩展名的文件,扩展名被剥离并将其设置为变量。

例如,如果$ foo是/$HOME/Desktop/doc.txt,那么我希望变量$ mediaid为" doc"

mediaid=$(basename $foo | cut -d. -f1)有效

但是

mediaid="$(${foo##*/} | cut -d. -f1)"

我得到我的报价/大括号/ $搞砸了,但我不确定在哪里或如何准确。

此外,是否有更多,更优雅的方式来编写此内容以避免将其汇总到cut

1 个答案:

答案 0 :(得分:2)

使用删除模式的扩展:

basename="${foo##*/}"
basename_stripped="${basename%.*}"

%导致从以下模式的foo值的末尾开始删除最短匹配。 .*是一个通配模式,匹配一个文字句点后跟任何内容。

##导致从头开始删除以下模式的最长匹配,*/匹配最后一个路径分隔符的所有内容。

扩展由shell执行,没有外部命令或子shell,因此它会更快。