我需要查明文件或目录名是否包含Unix中用于Bourne shell脚本的任何扩展名。
逻辑将是:
这是我在SO中的第一个问题,所以很高兴听到某人的意见。
答案 0 :(得分:4)
扩展的概念并不像传统/玩具DOS 8 + 3文件名那样严格定义。如果要查找包含点不是第一个字符的点的文件名,请尝试此操作。
case $filename in
[!.]*.*) filename=${filename%.*};;
esac
如果有$filename
,这将修改扩展(根据上面的定义,从最后一个点开始,如果有几个),否则没有任何内容。
如果您不处理名称可能以点开头的文件,则case
是多余的,因为如果没有点,分配也不会触及该值;但是有了这个腰带和吊带的例子,你可以轻松选择你喜欢的方法,以防你需要以某种方式扩展它。
要处理有点的文件,只要它不是第一个字符(但如果第一个字符也是点也没关系),请尝试使用模式?*.*
。
case
表达式 in
模式 )
命令 ;; esac
语法可能看起来很奇怪或可怕,但它非常多才多艺,非常值得学习。
答案 1 :(得分:0)
我会使用shell不可知解决方案。通过以下方式运行名称:
cut -d . -f 1
将为您提供第一个点的所有内容(' -d。'设置分隔符,' -f 1'选择第一个字段)。你可以玩params(尝试' - 补充'反向选择)并获得你想要的任何东西。