2009-05-28 4 views
0

내가 쓴을 설정 한 경우에도 평가됩니다 경우 양식의 문 :

if [ -n "${VAR:-x}" ]; then 
    #do something 
    export VAR=#something 
fi 

내 쉘 스크립트 호출 이 문장은 두 번이고 놀랍게도은 조건을 두 번 통과합니다.

[힌트 (아마도 ...) :이 정확한 코드는 포함 된 파일의 함수에서 반복됩니다. if 문은 먼저 함수를 호출하기 전에 평가됩니다. 이 함수가 호출 될 때 "다시"평가됩니다.]

여기에 무슨 문제가 있습니까? -x 플래그가 잘못 이해합니까?

감사합니다.

+0

나는 http://fixunix.com/questions/15902-bash-checking-if-env-var-set.html 에서 아이디어를 얻었으며 오도되었습니다. 아마도 이것은 내 나쁜 일이었을 것입니다 ... – Yaneeve

답변

4

${VAR:-x}에 을 입력하지 않으면 VAR 값으로 대체하십시오.

마찬가지로, ${FOO:-bar}FOO의 값 또는 barFOO 경우가 as described here를 설정되지 않은 문자열을 대체했다.

즉, -n은 비어 있지 않은지 확인하고 "${VAR:-x}"은 비워 두지 않으므로 항상 -n "${VAR:-x}"이 true임을 의미합니다.

+0

어떻게하면 변수의 존재/not-nullness를 쿼리합니까? – Yaneeve

+1

그냥 -n "$ {VAR}"해야합니다. VAR이 설정되어 있고 비어 있지 않으면 true입니다. –