it-swarm-vi.com

Ý nghĩa của $ là gì? trong một kịch bản Shell?

Khi xem qua một tập lệnh Shell, tôi thấy cụm từ "$?". Ý nghĩa của thuật ngữ này là gì?

37
Renjith G

$? 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.

43
cjm

Câu trả lời của Cjm là đúng, nhưng $? có thể được sử dụng theo những cách ngớ ngẩn trong các tập lệnh Shell và tôi muốn cảnh báo đ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 biến số tạm thời, 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 sử dụng $? phần lớn.

26
Bruce Ediger

Ngoài những gì cjm đã nói , nếu giá trị của $? là 0, sau đó 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.

3
Barun

$?- Trạng thái thoát của 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ố tiến trình của Shell 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.

3
Midhun S Sivan

$? 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 Prompt. 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.

0
Rahul Arora