![문자열의 표현식을 사용하여 테스트 실행](https://linux55.com/image/141557/%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%98%20%ED%91%9C%ED%98%84%EC%8B%9D%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%ED%85%8C%EC%8A%A4%ED%8A%B8%20%EC%8B%A4%ED%96%89.png)
문자열에서 테스트 명령을 실행하려고 합니다. 문자열에 표현식이 포함되어 있습니다.
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
.