Chúng tôi đã có một trải nghiệm gần đây với bash rằng ngay cả khi chúng tôi tìm thấy giải pháp, nó vẫn xoay quanh tâm trí của tôi. Làm cách nào để bash đánh giá biểu thức &&
về mã trả lại?Đánh giá hành vi mã thoát "&&" bash "
Thực thi kịch bản này, mà nên thất bại vì myrandomcommand
không tồn tại:
#!/bin/bash
set -e
echo "foo"
myrandomcommand
echo "bar"
Kết quả được mong đợi nhất:
~ > bash foo.sh
foo
foo.sh: line 6: myrandomcommand: command not found
[exited with 127]
~ > echo $?
127
Nhưng thay đổi một chút mã sử dụng biểu thức &&
:
#!/bin/bash
set -e
echo "foo"
myrandomcommand && ls
echo "bar"
Số ls
ement không được thực hiện (kể từ khi tuyên bố đầu tiên thất bại và không đánh giá báo cáo kết quả thứ hai), nhưng kịch bản hoạt động rất khác nhau:
~ > bash foo.sh
foo
foo.sh: line 6: myrandomcommand: command not found
bar # ('bar' is printed now)
~ > echo $?
0
Chúng tôi phát hiện ra rằng việc sử dụng khái niệm giữa ngoặc (myrandomcommand && ls)
nó hoạt động như mong đợi (như ví dụ đầu tiên), nhưng tôi muốn biết tại sao.
[BashFAQ # 105] (http://mywiki.wooledge.org/BashFAQ/105) có thể là một chi thú vị cho bạn – andlrc