Có nghĩa là gì bởi đô la?


6

Tôi đang sử dụng Debian 6.0. Tôi biết các đối số dòng lệnh thông thường nhưng không thể tìm thấy những gì $?có nghĩa là gì? Có ai có ý tưởng gì $?về Linux shell không?

Câu trả lời:


15

bash , không vỏ . (Bash là nhưng một trong số các vỏ có thể. Mặc dù vậy, nó là phổ biến nhất)

Nó có nghĩa là mã thoát của lệnh cuối cùng đã thực thi.

Xem tại đây: http://tldp.org/LDP/abs/html/othertypesv.html và tại đây http://tldp.org/LDP/abs/html/exit-status.html


6
Mỗi shell UNIX tôi có quyền truy cập để sử dụng $?để chỉ ra mã trả về của chương trình cuối cùng. Điều này bao gồm không chỉ bashmà còn vỏ Bourne tiêu chuẩn, ksh, csh, và zsh. Khá nhiều shell UNIX tồn tại đồng ý với cái này.
clee

Vỏ mà anh ta đang sử dụng trong Linux gần như chắc chắn bash, nhưng xuất $?phát từ vỏ Bourne.
Gabe

@clee Bạn nói đúng. Đoán đó là một phản ứng giật đầu gối tôi phải cho mọi người không biết rằng có một sự khác biệt giữa vỏ và bash.
troelskn

Vâng, Bash là một vỏ là tốt.
Ugo

5

Đối với hệ vỏ hỗ trợ biến vỏ này "$?" chứa mã trả về của một lệnh được thực thi gần đây nhất.

Vì vậy, nếu bạn đang chạy chương trình "abc", trả về 1 khi thoát

$ echo $?

cho "1" - mã trả về.

Và nó không chỉ có sẵn trong bash, các shell khác cũng có tính năng này.


2

Mã trả về của chương trình thực hiện cuối cùng.


0

Ồ, họ đã đề cập rằng đó là mã trả về của chương trình được thực hiện cuối cùng, nhưng không ai đề cập rằng nếu nó nhiều hơn 0 thì có lẽ nó chỉ ra lỗi. Đó là thông lệ chung khi chương trình hoặc tập lệnh thực thi không có lỗi, nó trả về giá trị 0 để chỉ ra rằng nó đã kết thúc mà không có lỗi. Không phải tất cả các chương trình và kịch bản làm, nhưng họ nên.

Kiểm tra giá trị của $? sau khi chạy lệnh linux sẽ cho bạn biết nếu có lỗi hay không. Kiểm tra tài liệu của từng chương trình để biết giá trị trả về có thể là gì. Một số sẽ không trả lại một giá trị nhưng hầu hết làm. Trong tập lệnh của bạn, bạn nên kết thúc bằng 'return X' trong đó X là một số giá trị 0 = tốt / không có lỗi và bất cứ điều gì lớn hơn 0 chỉ ra một số vấn đề xảy ra. Ngay cả khi tất cả những gì bạn sử dụng là giá trị 0 hoặc 1, đó là cách thực hành tốt. Điều này cho phép các tập lệnh khác biết liệu dòng / lệnh tiếp theo sẽ được thực thi dựa trên thành công hay thất bại của lệnh cuối cùng. Nó làm cho kịch bản thông minh hơn và kiểm soát tốt hơn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.