2010-02-28 7 views
9

J'essaie d'obtenir l'extension de fichier pour un fichier dans un script shell. Mais sans aucune chance.Comment obtenir l'extension d'un fichier dans un script shell

La commande J'utilise est

file_ext=${filename##*.} 

et

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

Mais les deux commandes n'a pas réussi à mettre en valeur file_ext variable. Mais quand j'essaye

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

Il me donne le résultat désiré. Je suis nouveau au script shell. S'il vous plaît décrire la situation ce qui se passe. Et aussi comment dois-je le faire?

Merci.

+0

Pour d'autres références, http://tldp.org/LDP/abs/html/ est un très bon endroit! –

+0

Je me demande pourquoi le premier style fonctionne. Pourriez-vous s'il vous plaît expliquer? – xiaohan2012

Répondre

13

Les espaces font mal.

Quoi qu'il en soit, vous devriez faire:

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

qui stockera en $ file_ext la sortie de la commande.

+0

Oui. L'idée était à la commande dans $(). Merci pour votre réponse. –

+0

De rien. –

3

Vous devez être prudent lors de la déclaration des variables.

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

Notez que vous ne pouvez pas mettre un espace après la variable, car il est interprété comme une commande normale.

+0

Merci bien interprété. :) J'ai compris que votre point ne fera jamais cette erreur. –

18

pour obtenir l'extension de fichier, il suffit d'utiliser le shell

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

Oui, mais pourquoi cela fonctionne-t-il? Qu'est-ce que ce '## *.' Vaudou? – Okonomiyaki3000

Questions connexes