2017-02-08 1 views
0

실패한 테스트를 재현 할 수있는 bash 스크립트를 작성하려고합니다. 인쇄bash 인용은 중괄호 {} 확장과 어떻게 작동합니까?

원래 명령했다 (예를 들어 우리가 테스트 에코)

echo aa @p{0,1}=port bb 

:

aa @p0=port @p1=port bb 

나는 변수

TESTCASE='aa @p{0,1}=port bb' 

에 인수있어 내가 너무 명령 줄 빌드

CMD='echo '${TESTCASE} 

${CMD} 

를 실행하고 내가 얻을 : 중괄호 즉

aa @p{0,1}=port bb 

을 그들이 명령 행에서와 같이 확장하지 않는

무슨 일 및 어떻게 수정해야합니까?

+1

'평가 후면 $를 원하는 걸 얻을 것이다 CMD'는 당신이 원하는 것을 얻을 것입니다 – Aserre

+4

'bash'에'@'연산자가 없습니다. – chepner

+2

'brace expansion'에 대한 자세한 내용은 http://wiki.bash-hackers.org/syntax/expansion/brace – Inian

답변

-1

는 결합 :

중괄호 확장 변수를 교체하기 전에 발생 : 이 gnu.org/software/bash/manual/bashref.html#Shell-Expansions를 참조

eval $CMD 

당신이

+0

중괄호 확장을 위해서'eval'을 사용하지 않습니다. – chepner

+0

왜 안 되니? 마치 원하는대로 명령을 실행하는 것처럼 보이는 것입니다. –

7

배열을 사용하여 일반 매개 변수가 아닌 여러 개의 인수를 저장합니다. 배열 매개 변수의 값을 설정하기 전에 괄호 안의 문자열에 중괄호 확장이 적용됩니다.

test_case=(aa @p{0,1}=port bb) 

매장 코드가 아닌 일반 매개 변수에 함수를 사용합니다.

Aserre 글렌 잭맨 별 댓글에서
cmd() { 
    echo "${test_case[@]}" 
}