Câu trả lời:
Bất kỳ phiên bản tuân thủ POSIX nàogrep
đều có công tắc -q
để yên lặng:
-q
Quiet. Nothing shall be written to the standard output, regardless
of matching lines. Exit with zero status if an input line is selected.
Trong GNU grep (và có thể cả những người khác), bạn cũng có thể sử dụng các từ đồng nghĩa tùy chọn dài:
-q, --quiet, --silent suppress all normal output
Chuỗi tồn tại:
$ echo "here" | grep -q "here"
$ echo $?
0
Chuỗi không tồn tại:
$ echo "here" | grep -q "not here"
$ echo $?
1
Bạn chỉ cần kết hợp grep -q <pattern>
với kiểm tra ngay lập tức mã thoát cho quy trình cuối cùng để thoát ( $?
).
Bạn có thể sử dụng điều này để xây dựng một lệnh như thế này, ví dụ:
uname -a | grep -qi 'linux' ; case "$?" in "0") echo "match" ;; "1") echo "no match" ;; *) echo "error" ;; esac
Bạn có thể tùy ý chặn đầu ra từ STDERR
như vậy:
grep -qi 'root' /etc/shadow &> /dev/null ; case "$?" in "0") echo "match" ;; "1") echo "no match" ;; *) echo "error: $?" ;; esac
Điều này sẽ in error: 2
từ case
tuyên bố (giả sử chúng tôi không có đặc quyền để đọc /etc/shadow
hoặc tệp không tồn tại) nhưng thông báo lỗi từ grep
sẽ được chuyển hướng đến /dev/null
vì vậy chúng tôi không bao giờ nhìn thấy nó.
echo $?
nếugrep
trả về mã thoát khác không.