Từ bash
manpage:
[[ expression ]]
- trả lại trạng thái 0 hoặc 1 tùy thuộc vào đánh giá của biểu thức biểu thức điều kiện.
Và, cho các biểu thức, một trong những lựa chọn là:
expression1 && expression2
- đúng nếu cả hai expression1
và expression2
là đúng sự thật.
Vì vậy, bạn có thể and
chúng lại với nhau như sau (-n
là đối diện của -z
vì vậy chúng tôi có thể thoát khỏi những !
):
if [[ -n "$var" && -e "$var" ]] ; then
echo "'$var' is non-empty and the file exists"
fi
Tuy nhiên, tôi không nghĩ rằng nó là cần thiết trong trường hợp này , -e xyzzy
là true nếu tệp xyzzy
tồn tại và có thể dễ dàng xử lý các chuỗi trống. Nếu đó là những gì bạn muốn thì bạn không thực sự cần kiểm tra -z
không rỗng:
pax> VAR=xyzzy
pax> if [[ -e $VAR ]] ; then echo yes ; fi
pax> VAR=/tmp
pax> if [[ -e $VAR ]] ; then echo yes ; fi
yes
Nói cách khác, chỉ cần sử dụng:
if [[ -e "$var" ]] ; then
echo "'$var' exists"
fi
Giải pháp này hoạt động ngay cả trong các vỏ tuân thủ nghiêm ngặt POSIX và do đó cũng trong 'bash'; tuy nhiên, để tận dụng tối đa "bashisms", hãy xem câu trả lời của @ paxdiablo. – mklement0
Rất vui khi thấy điều này được khuyên thay vì '-a' đã lỗi thời. –
Tôi tìm thấy một giải thích tuyệt vời và chi tiết khác - http://stackoverflow.com/questions/3601515/how-to-check-if-a-variable-is-set-in-bash – valentt