2010-02-28 32 views
9

Tôi đang cố gắng mở rộng tệp cho một tệp trong tập lệnh shell. Nhưng không may mắn.Cách mở rộng tệp trong tập lệnh shell

Lệnh Tôi đang sử dụng là

file_ext=${filename##*.} 

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

Nhưng cả hai lệnh thất bại trong việc đưa giá trị trong file_ext biến. Nhưng khi tôi thử

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

Nó mang lại cho tôi kết quả mong muốn. Tôi mới vào kịch bản shell. Hãy mô tả tình hình những gì đang xảy ra. Và tôi cũng nên làm như thế nào?

Cảm ơn.

+0

Đối với tài liệu tham khảo thêm, http://tldp.org/LDP/abs/html/ là một nơi rất tốt! –

+0

Tôi tự hỏi tại sao phong cách đầu tiên lại hoạt động. Bạn có thể giải thích? – xiaohan2012

Trả lời

13

Không gian đau.

Dù sao bạn nên làm:

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

Điều đó sẽ lưu trữ trong $ file_ext đầu ra của lệnh.

+0

Có. Ý tưởng là lệnh trong $(). Cảm ơn câu trả lời của bạn. –

+0

Bạn được chào đón. –

3

Bạn phải cẩn thận khi khai báo biến.

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

Chú ý rằng bạn không có thể đặt một không gian sau khi thay đổi, bởi vì sau đó nó được hiểu như là một lệnh bình thường.

+0

Cảm ơn bạn đã hiểu rõ. :). Tôi nhận được quan điểm của bạn sẽ không bao giờ làm sai lầm này. –

18

để có được phần mở rộng tập tin, chỉ cần sử dụng vỏ

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

Có nhưng tại sao tính năng này hoạt động? '## *. 'Voodoo này là gì? – Okonomiyaki3000

Các vấn đề liên quan