2014-04-30 4 views
2

변수가 설정되지 않은 경우 ${parameter:-word} 매개 변수 확장 형식을 사용하여 기본값으로 평가할 때 따옴표를 사용하는 가장 좋은 방법은 무엇입니까?

예를 들어, 변수가 값을 가지고 있는지 테스트하기 위해 -u으로 설정된 Bash 쉘 스크립트가 (정의되지 않은 변수 또는 설정되지 않은 변수가 평가 될 때 오류를 생성하기 위해) 가정한다면, 다음과 같은 것을 쓰는 가장 좋은 방법은 무엇이겠습니까? if [[ -z "$FOO" ]]?

if [[ -z "${FOO:-}" ]] 

또는

if [[ -z ${FOO:-""} ]] 

또는 뭔가 다른?

+2

다른 것 :'[[-z $ {FOO : -}]]' –

+2

Bourne Shell과의 호환성을 염두에두고 있다면, [-z "$ {FOO : -}}] -bracket 테스트 및 변수 주위의 큰 따옴표. –

답변

6

최신 버전의 bash (이 글을 쓰는 시점에서 4.2)을 사용하는 경우 -v 옵션을 사용하여 변수를 전혀 확장하지 않고 설정했는지 테스트 할 수 있습니다. 당신이 이전 버전을 사용하는 경우

if [[ -v FOO ]]; then 
    echo "FOO=$FOO" 
else 
    echo "FOO not set" 
fi 

, 난 그냥

if [[ -z ${FOO:-} ]]; 

사용하는 것이 따옴표가 필요 없으며, IMO이 깨끗한 보인다.

+1

+1; 구체적으로'-v' 연산자는'4.2'에서 소개되었습니다 - http://tiswww.case.edu/php/chet/bash/NEWS를보십시오. 이전 버전 :'-z $ ​​{FOO : -}'는 _all_ 상황에서 작동하는 가장 견고한 form_입니다. 그러나, bash가'-u'로 시작되지 않았거나'set -u' ('set -o nounset')가 실행 되었다면'[[-z $ FOO]]'도 작동합니다. – mklement0

+1

':'도 필요 없습니다. – rici