답변:
if [ ! -z "$var" ] && [ -e "$var" ]; then
# something ...
fi
-a
.
로부터 bash
맨 :
[[ expression ]]
-조건식의 평가에 따라 0 또는 1의 상태를 반환합니다.
그리고 표현식의 경우 옵션 중 하나는 다음과 같습니다.
expression1 && expression2
- 두 경우는 trueexpression1
와는expression2
사실이다.
따라서 and
다음과 같이 함께 사용할 수 있습니다 ( -n
반대 -z
의 경우 !
).
if [[ -n "$var" && -e "$var" ]] ; then
echo "'$var' is non-empty and the file exists"
fi
그러나이 경우에는 필요하다고 생각하지 않습니다 -e xyzzy
. xyzzy
파일 이 존재하고 빈 문자열을 쉽게 처리 할 수 있다면 사실 입니다. 그것이 원하는 것이라면 실제로 -z
비어 있지 않은 검사 가 필요하지 않습니다 .
pax> VAR=xyzzy
pax> if [[ -e $VAR ]] ; then echo yes ; fi
pax> VAR=/tmp
pax> if [[ -e $VAR ]] ; then echo yes ; fi
yes
즉, 다음을 사용하십시오.
if [[ -e "$var" ]] ; then
echo "'$var' exists"
fi
[[ -e "$var" ]] && echo "'$var' exists"
if [ -n "$var" -a -e "$var" ]; then
do something ...
fi
bash
POSIX에 대한 언급이 없으며,이 버전은 bash
다른 현대적인 쉘 에서 작동합니다 .
bash
또는 다른 현대 쉘을 사용한다고 가정한다면, 추천 할 이유 가 훨씬 적습니다-a
.
[ "$var1" -o "$var2" ]
; 경우 var1=(
와 var2=)
, 그 다음 우리가해야하는 것은 여부에 대한 테스트입니다 -o
중 하나 오히려 여부보다, 비 비어 var1
또는 var2
비 비어 있습니다. 이러한 종류의 모호성은 정확한 인용 부호를 가진 x$var
현대 (90 년대 이후) test
명령 의 관용구에 대한 유일한 합법적 인 이유이며, 관용구 는 화재로 죽어야합니다.
변수를 간단히 인용하십시오.
[ -e "$VAR" ]
비어 [ -e "" ]
있으면 평가됩니다 $VAR
.
버전이 (으)로 평가되어 작동하지 않습니다 [ -e ]
. 이 경우, bash는 단일 인수 ( -e
)가 비어 있지 않은 문자열 인지 간단히 확인 합니다.
맨 페이지에서 :
인수 수에 따라 규칙 집합을 사용하여 조건식을 테스트하고 평가합니다. ...
1 논쟁
인수가 널이 아닌 경우에만 표현식이 참입니다.
(또한이 솔루션에는 공백이 포함 된 파일 이름으로 작업 할 경우 추가 이점이 있습니다)
bash
; 그러나 "bashisms"를 최대한 활용하려면 @paxdiablo의 답변을 참조하십시오.