câu lệnh if khác trong một dòng sử dụng && và ||


7

Tôi muốn biết nếu 2 cách này là tương đương:

Đầu tiên:

#!/bin/bash
if [ -x $FILE ]
then
  echo "You have execution permission to a "$FILE""
else
  echo "You don't have execution permission to a "$FILE""
fi

Thứ hai:

#!/bin/bash
[ -x $FILE ] && echo "You have execution permission to a "$FILE"" || echo "You don't have execution permission to a "$FILE""

1
Trích dẫn của bạn là sai : [ -x "$FILE" ]; echo "You have execution permission to '$FILE'"
Hauke ​​Laging

Ok cảm ơn, nhưng có vẻ như mã của tôi đang hoạt động theo cùng một cách (có thể không phù hợp với tiêu chuẩn :)) Nhưng 2 cách này có tương đương không?
dùng4954282

1
Phiên bản của bạn có hoạt động hay không phụ thuộc vào việc tên tệp có chứa khoảng trắng (hay chính xác hơn là: IFSký tự).
Hauke ​​Laging

Câu trả lời:


5

Các cấu trúc không tương đương nói chung nhưng trong trường hợp này chúng là. Lý do là echoluôn có mã thoát 0. Nếu đó là một lệnh thay vào đó có thể thoát với mã lớn hơn 0 thì "nhánh khác" cũng sẽ được thực thi. Điều này là không thể trong iftrường hợp.


2
Các iftrường hợp cũng dễ đọc hơn nhiều.
jkt123

1
@ user3014282: Để giải thích câu trả lời của Hauke, [ -e /tmp ] && { echo 1 ; false ; } || echo 2sẽ in cả hai 12. Kể lại tương tự bằng cách sử dụng if ... then ... else ... fisẽ chỉ in 1. Vì vậy, && ||không phải là một tương đương chính xác của khác.
jamadagni
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.