2010-02-28 137 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

相關問題