Tôi đang làm việc với Bash 3 và tôi đang cố gắng tạo thành một điều kiện. Trong C / C ++, đơn giản chết của nó : ((A || B) && C)
. Ở Bash, hóa ra không phải vậy (tôi nghĩ rằng các tác giả Git phải đóng góp mã này trước khi họ chuyển sang các nỗ lực khác).
Điều này không hoạt động. Lưu ý rằng đó <0 or 1>
không phải là một chuỗi ký tự; nó có nghĩa là 0 hoặc 1 (thường xuất phát từ grep -i
).
A=<0 or 1>
B=<0 or 1>
C=<0 or 1>
if [ [ "$A" -eq "0" ] || [ "$B" -ne "0" ] ] && [ "$C" -eqe "0" ]; then ... fi
Nó dẫn đến:
line 322: syntax error near unexpected token `[['
Sau đó tôi đã thử:
A=<0 or 1>
B=<0 or 1>
C=<0 or 1>
if [ ([ "$A" -eq "0" ]) || ([ "$B" -ne "0" ]) ] && [ "$C" -eq "0" ]; then ... fi
nó dẫn đến:
line 322: syntax error near unexpected token `[['
Một phần của vấn đề là kết quả tìm kiếm là những ví dụ tầm thường, và không phải là những ví dụ phức tạp hơn với các điều kiện ghép.
Làm thế nào để tôi thực hiện một đơn giản ((A || B) && C)
trong Bash?
Tôi đã sẵn sàng để hủy đăng ký nó và lặp lại các lệnh tương tự trong nhiều khối:
A=<0 or 1>
B=<0 or 1>
C=<0 or 1>
if [ "$A" -eq "0" ] && [ "$C" -eq "0" ]; then
...
elif [ "$B" -ne "0" ] && [ "$C" -eq "0" ]; then
...
fi