Trong bash, tôi muốn nói "nếu một tệp không chứa XYZ, thì" làm một loạt các thứ. Cách tự nhiên nhất để chuyển mã này thành mã là một cái gì đó như:Bash có điều kiện trên mã thoát lệnh
if [ ! grep --quiet XYZ "$MyFile" ] ; then
... do things ...
fi
Nhưng tất nhiên, cú pháp Bash không hợp lệ. Tôi có thể sử dụng backticks, nhưng sau đó tôi sẽ kiểm tra đầu ra của tập tin. Hai lựa chọn thay thế tôi có thể nghĩ đến là:
grep --quiet XYZ "$MyFile"
if [ $? -ne 0 ]; then
... do things ...
fi
Và
grep --quiet XYZ "$MyFile" ||
( ... do things ...
)
Tôi thích loại thứ hai, đó là lispy hơn và || cho luồng điều khiển không phải là không phổ biến trong các ngôn ngữ kịch bản. Tôi cũng có thể thấy đối số cho người đầu tiên, mặc dù khi người đó đọc dòng đầu tiên, họ không biết lý do tại sao bạn đang thực thi grep, có vẻ như bạn đang thực hiện nó cho hiệu ứng chính, thay vì chỉ kiểm soát một chi nhánh trong kịch bản.
Có cách nào thứ ba, trực tiếp hơn sử dụng tuyên bố if
và có grep
trong điều kiện không?
có thể trùng lặp của [gặp "toán tử đơn nhất mong đợi" trong tập lệnh bash] (http://stackoverflow.com/questions/10586213/encounter-unary-operator-expected-in-bash-script) – tripleee