2014-12-24 3 views
1

나는 sh -c 'bash in here'을 사용하여 호출 된 복잡한 bash 스크립트를 작성 중이다. 그러나 변수를 설정하려고 할 때 나는 매우 복잡한 동작을합니다 :

sh -c "SOMEVAR=$(expr 1 - 2) && echo $SOMEVAR" 출력이 -1 일 때 이되어야합니다!

내가 이해하는 한, $(expr 1 - 2)-1으로 평가됩니다. 따라서 본질적으로이 스크립트는 SOMEVAR=-1 && echo SOMEVAR이며 1을 반환합니다.

Bash에 대해 이해할 수없는 점은 무엇입니까? 내 대본에 문제가 있습니까?

+2

실행하면'-1'이됩니다. – icktoofay

+0

@icktoofay : 큰 따옴표를 사용했기 때문에 실패했을 때 작은 따옴표를 게시했습니다. 나는 그것을 알아 냈고 내 자신의 질문에 대답했다. 도와 주셔서 감사합니다 :) –

+2

nitpick : 여기에'sh -c 'sh 코드 또는'bash -c'bash 코드가 있어야합니다. 'sh -c 'bash 코드는 여기에 없다. bash는 sh가 할 수없는 일을 할 수 있습니다. – lesmana

답변

1

나는 배쉬는 무엇을하고 있었는지 알아 냈 :

: 나는 따옴표 ( ")를 사용했기 때문에, 내 변수 ( SOMEVAR) 외부 값 ( 1이었다) 실제로 실행 코드를 만드는 sh -c 물건에 삽입되고 있었다

sh -c "SOMEVAR=$(expr 1 - 2) && echo $SOMEVAR" 

해결 방법 : 대신

sh -c "SOMEVAR=$(expr 1 - 2) && echo 1" 

사용 작은 따옴표 (')

sh -c 'SOMEVAR=$(expr 1 - 2) && echo $SOMEVAR'