2017-03-07 7 views
3

변수가 zsh에 설정되어 있는지 테스트 할 표준/관용적 방법은 무엇입니까?변수가 zsh에 설정되어 있는지 어떻게 확인합니까?

if ....something.... ; then 
    print "Sweet, that variable is defined" 
else 
    print "That variable is not defined" 
fi 

여기 the SO answer for bash입니다.

+0

가능한 복제 [변수가 강타로 설정되어 있는지 확인하는 방법?] (http://stackoverflow.com/questions/3601515/how-to-check-if-a-variable-is-set -in-bash) – Jens

+0

허. 즉, * zsh 전용 구문이지만 POSIX sh 구문도 여기에서 작동합니다. –

+0

명확히하기 위해 편집 됨. Bash 질문은 표준 zsh 구문을 제공하지 않습니다. – paulmelnikow

답변

5

zsh을이 작업을 수행하는 일반적인 방법은 다음과 같습니다

if ((${+commands[brew]})); then 
    brew install mypackage 
else 
    print "Please install Homebrew first." 
fi 

zsh을 5.3 이상에서, 당신은 조건식에 -v 연산자를 사용할 수 있습니다 : 예를 들어

if ((${+SOME_VARIABLE})); then 

if [[ -v SOME_VARIABLE ]]; then 

POSIX 호환 테스트는

입니다.
+1

어, 아니,'[[]]'는 (POSIX가 아닌) 이식성이 없습니다. – Jens

+0

올바른 방법은 무엇입니까? 고쳐 주자. – paulmelnikow

+0

이식 가능한 테스트는'[-z "$ {SOME_VARIABLE + 1}"]'; 변수가 아무것도 (빈 문자열조차도)로 설정되면 확장은 '1'을 생성하고, 설정되지 않은 경우 빈 문자열로 확장됩니다. – chepner

4

-v (zsh 5.3에서 소개 됨) 연산자를 조건식에 사용하십시오.

% unset foo 
% [[ -v foo ]] && echo "foo is set" 
% foo= 
% [[ -v foo ]] && echo "foo is set" 
foo is set 
+0

zsh 5.2에서 작동하지 않습니다. zsh : 알 수없는 조건 : -v – paulmelnikow