Câu trả lời:
$?
mở rộng đến trạng thái thoát của đường ống tiền cảnh được thực hiện gần đây nhất. Xem phần Thông số đặc biệt của hướng dẫn Bash .
Nói một cách đơn giản hơn, đó là trạng thái thoát của lệnh cuối cùng.
Câu trả lời của Cjm là chính xác, nhưng $?
có thể được sử dụng theo những cách ngớ ngẩn trong các kịch bản shell, và tôi muốn cảnh báo chống lại điều đó. Rất nhiều tập lệnh shell xấu có mẫu mã lặp đi lặp lại:
run_some_command
EXIT_STATUS=$?
if [ "$EXIT_STATUS" -eq "0" ]
then
# Do work when command exists on success
else
# Do work for when command has a failure exit
fi
Nếu có thể (lo ngại về khả năng đọc đôi khi xâm nhập), bạn nên mã hóa tình huống này theo cách khác:
if run_some_command
then
# Do work when command exists on success
else
# Do failure exit work
fi
Cách sử dụng sau này nhanh hơn, không làm ô nhiễm không gian tên biến của shell với số lượng của biến temp, thường có thể dễ đọc hơn cho con người và khuyến khích sử dụng "logic tích cực", thực hành viết các điều kiện không có phủ định, có nhận thức đơn giản trong hầu hết các tình huống. Nó không đi với việc sử dụng $?
cho hầu hết các phần.
Ngoài những gì cjm đã nói , nếu giá trị bằng $?
0, thì quá trình trước đó đã chấm dứt bình thường (hoặc thành công). Nếu không, đã có một số lỗi.
diff
thoát với 0 nếu các tệp được so sánh là như nhau, với 1 nếu chúng khác nhau và 2 là lỗi.
$?
-Hình trạng thoát lệnh cuối cùng được thực thi.
$0
Tên tệp của tập lệnh hiện tại.
$#
-Số lượng đối số được cung cấp cho một tập lệnh.
$$
-Số quá trình của vỏ hiện tại. Đối với tập lệnh shell, đây là ID tiến trình mà chúng đang thực thi.
$? cung cấp cho chúng tôi trạng thái thực thi của lệnh thực thi cuối cùng trên dấu nhắc. Giá trị '0' biểu thị rằng lệnh đã được thực hiện thành công và '1' không thành công.
$?
xác định trạng thái thoát của lệnh được thực thi. $
theo sau là các số (ví dụ $1
, $2
v.v.) đại diện cho các tham số trong tập lệnh shell.