2011-12-06 43 views
10

Ai đó có thể giải thích mã bit này có ý nghĩa gì không?Giải thích mã bit này

tôi tin rằng dòng thứ hai là "nếu tình trạng thoát là không", sau đó echo "lệnh hợp lệ" nhưng tôi không hiểu dòng đầu tiên

[email protected] &>/dev/null 
if [[ $? = 0 ]] 
then 
    echo "Valid command" 
fi 

Trả lời

2

tôi muốn thêm rằng đây là cách không cần thiết tiết và có thể được rút ngắn xuống còn

if "[email protected]" &>/dev/null 
then 
    echo "Valid command" 
fi 

hoặc thậm chí ngắn hơn

"[email protected]" &>/dev/null && echo "Valid command" 
7

Dòng đầu tiên chạy lệnh thành lập bằng cách đơn giản sử dụng tất cả đối số cho tập lệnh và chuyển hướng đầu ra đến/dev/null, chủ yếu ném nó đi.

Biến được xây dựng trong [email protected] mở rộng cho tất cả thông số vị trí, với mỗi thông số là chuỗi được trích dẫn, tức là các thông số được chuyển nguyên vẹn mà không cần giải thích hoặc mở rộng. Để có được hiệu ứng này, tôi tin rằng bạn cần báo giá việc sử dụng biến số, ví dụ: "[email protected]".

Nhà điều hành &> chuyển hướng cả stdout và stderr.

+1

Chỉ cần để hỗ trợ: giải thích được tìm thấy ở đây: http: // tldp .org/LDP/abs/html/internalvariables.html # APPREF – Yuri

+0

Tôi nghĩ rằng '$ *' và '$ @' chỉ khác nhau khi được bao quanh bởi dấu ngoặc kép. – mkb

+1

@mkb: bạn nói đúng. Tôi sợ @unwind không phải là: không chỉ định '" $ @ "', các tham số sẽ được phân tách khoảng trắng, tức là 'hàm TT() {$ @; }; TT ls 1 2 '3 4'' – choroba

4

Theo số manual, [email protected] mở rộng đến thông số vị trí, bắt đầu từ một. Nếu bạn gọi tập lệnh này là scripty.sh ls /, nó sẽ thực thi ls / trong khi chuyển hướng tất cả đầu ra sang nhóm bit. Điều đó sẽ trở lại thành công (tôi hy vọng!) Và do đó kịch bản sẽ in Valid command. Nếu bạn gọi nó là scripty.sh ls /some/nonexistent/directory thì lệnh ls sẽ không thành công và tập lệnh sẽ không xuất được gì.

Thực ra, tôi nghĩ rằng tập lệnh có thể được cải thiện để đặt dấu ngoặc kép xung quanh [email protected] để các đối số có dấu cách trong đó không chuyển lên trình thông dịch.

Với [email protected] lệnh ls "/Library/Application Support" được mở rộng thành ba từ. Với "[email protected]" nó được mở rộng thành hai, và lệnh được chạy giống như nó sẽ không có kịch bản gói nó.

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