문자열의 표현식을 사용하여 테스트 실행

문자열의 표현식을 사용하여 테스트 실행

문자열에서 테스트 명령을 실행하려고 합니다. 문자열에 표현식이 포함되어 있습니다.

 TEST="! -e ~/bin/xyz"
 if [ `echo "$TEST"` ]; then
    echo running "$TEST";
 fi

그러나 위의 if 조건은 true로 평가되지만 아래 표시된 대로 명령을 직접 삽입하면 false로 평가됩니다.

 if [ ! -e ~/bin/xyz ]; then
    echo running;
 fi

두 번째 조각의 동작이 정확합니다. 차이점이 있는 이유는 무엇이며 올바른 결과를 얻기 위해 첫 번째 스니펫을 수정하려면 어떻게 해야 합니까?

답변1

첫 번째 예제의 문제점은 반환된 문자열의 echo길이가 0이 아닌지 테스트한다는 것입니다. 이 문제를 해결하는 한 가지 방법은 eval테스트된 표현식을 사용하는 것입니다.

TEST="! -e ~/bin/xyz"
if eval "[ $TEST ]"; then
   echo running "$TEST";
fi

대괄호는 내부에 있으며 이는 명령 eval이므로 [인수인 변수와 함께 명령을 평가합니다 $TEST.

관련 정보