2012-01-08 49 views
5

Tập lệnh bash ngắn bên dưới liệt kê tất cả các tệp và thư mục trong thư mục đã cho và thư mục con của nó. Ý nghĩa của $1/* trong tập lệnh là gì? Xin vui lòng cho tôi một số tài liệu tham khảo về nó. Cảm ơn

#!/bin/sh 

list_alldir(){ 
    for file in $1/* 
    do 
     if [ -d $file ]; then 
      echo $file 
      list_alldir $file 
     else 
      echo $file 
     fi 
    done 
} 

if [ $# -gt 0 ]; then 
    list_alldir "$1" 
else 
    list_alldir "." 
fi 

Trả lời

18

Đó là glob của đối số đầu tiên coi như một thư mục

Trong kịch bản bash các đối số vào một tập tin được truyền vào kịch bản như $0 (đó là tên kịch bản), sau đó $1, $2 , $3 ... Để truy cập tất cả chúng, bạn sử dụng nhãn của chúng hoặc bạn sử dụng một trong các cấu trúc nhóm. Đối với các cấu trúc nhóm có $*[email protected]. ($* xem xét tất cả đối số dưới dạng một khối ở đó là [email protected] xem chúng là giới hạn bởi $IFS)

5

$1 là tham số đầu tiên.
for file in $1/* nghĩa là vòng lặp có biến số file có giá trị tên của từng tệp trong thư mục có tên trong tham số đầu tiên.

2

$ 1 là đối số dòng lệnh đầu tiên. Nếu bạn chạy ./asdf.sh a b c d e, thì $ 1 sẽ là, $ 2 sẽ là b, v.v. Trong các hàm có hàm, $ 1 có thể đóng vai trò là tham số hàm đầu tiên, v.v.

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