2010-02-28 16 views
9

Estoy tratando de obtener la extensión de archivo para un archivo en el script de shell. Pero sin suerte.Cómo obtener la extensión de un archivo en el script de shell

El comando que estoy utilizando es

file_ext=${filename##*.} 

y

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

embargo, tanto de los comandos no logró poner en valor file_ext variable. Pero cuando intento

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

Me da el resultado deseado. Soy nuevo en el script de shell. Por favor describa la situación que está sucediendo. Y también ¿cómo debería hacerlo?

Gracias.

+0

Para más referencias, http://tldp.org/LDP/abs/html/ es un muy buen lugar! –

+0

Me pregunto por qué funciona el primer estilo. ¿Podría explicar por favor? – xiaohan2012

Respuesta

13

Espacios hiere.

De todos modos se debe hacer:

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

que almacenará en $ file_ext la salida del comando.

+0

Sí. La idea era para el comando en $(). Gracias por tu respuesta. –

+0

De nada. –

3

Debe tener cuidado al declarar las variables.

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

Observe que no puede poner un espacio después de la variable, ya que entonces se interpreta como un comando normal.

+0

Gracias bien interpretado. :). Tengo tu punto nunca hará este error. –

18

para obtener extensión de archivo, sólo tiene que utilizar la cáscara

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

Sí, pero ¿por qué funciona esto? ¿Qué es esto '## *.' Vudú? – Okonomiyaki3000

Cuestiones relacionadas