2010-02-28 8 views
9

Sto cercando di ottenere l'estensione del file per un file nello script di shell. Ma senza fortuna.Come ottenere l'estensione di un file nello script di shell

Il comando che sto usando è

file_ext=${filename##*.} 

e

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

Ma entrambi i comandi non è riuscito a mettere in valore file_ext variabile. Ma quando provo

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

Mi dà il risultato desiderato. Sono nuovo allo script di shell. Si prega di descrivere la situazione cosa sta succedendo. E anche come dovrei farlo?

Grazie.

+0

Per ulteriori riferimenti, http://tldp.org/LDP/abs/html/ è un posto molto buono! –

+0

Mi chiedo perché il primo stile funzioni. Potresti spiegare per favore? – xiaohan2012

risposta

13

Gli spazi fanno male.

In ogni caso si dovrebbe fare:

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

che memorizzerà in $ file_ext l'output del comando.

+0

Sì. L'idea era al comando in $(). Grazie per la tua risposta. –

+0

Prego. –

3

È necessario fare attenzione quando si dichiarano le variabili.

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

notare che non sipuò mettere uno spazio dopo la variabile, perché poi viene interpretato come un normale comando.

+0

Grazie ben interpretato. :). Ho capito che il tuo punto non commetterà mai questo errore. –

18

per ottenere estensione del file, basta usare la shell

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

Sì, ma perché funziona? Cos'è questo '## *.' Voodoo? – Okonomiyaki3000

Problemi correlati