2010-02-28 94 views
9

我试图在shell脚本中获取文件的文件扩展名。但没有任何运气。如何在shell脚本中获取文件的扩展名

我使用的命令是

file_ext=${filename##*.} 

file_ext = $filename |awk -F . '{if (NF>1) {print $NF}}' 

但两者的命令没有把价值变量file_ext。但是,当我尝试

echo $filename |awk -F . '{if (NF>1) {print $NF}}' 

它给了我想要的结果。我是shell脚本的新手。请描述发生的情况。而且我应该怎么做呢?

谢谢。

+0

如需进一步参考,http://tldp.org/LDP/abs/html/是一个很不错的地方! – 2010-02-28 19:51:15

+0

我想知道为什么第一种风格的作品。你能解释一下吗? – xiaohan2012 2013-09-22 14:11:15

回答

13

空间伤害。

反正你应该做的:

file_ext=$(echo $filename |awk -F . '{if (NF>1) {print $NF}}') 

这将$存储file_ext命令的输出。

+0

是的。这个想法是在$()中的命令。感谢您的回答。 – 2010-02-28 19:57:40

+0

不客气。 – 2010-02-28 19:59:55

3

声明变量时必须小心。

variable1="string" # assign a string value 
variable3=`command` # assign output from command 
variable2=$(command) # assign output from command 

请注意,您不能把空间的变量之后,因为那时它被解释为正常的命令。

+0

非常感谢。 :)。我明白你的意思决不会犯这个错误。 – 2010-02-28 19:56:35

18

得到文件的扩展名,只是使用shell

$ filename="myfile.ext" 
$ echo ${filename##*.} 
ext 
$ file_ext=${filename##*.} #put to variable 
$ echo ${file_ext} 
ext 
+1

是的,但为什么这个工作?这是什么'## *。'巫毒? – Okonomiyaki3000 2016-09-23 01:23:44

相关问题