sh -c: 종료되지 않은 인용 문자열 오류 [중복]

sh -c: 종료되지 않은 인용 문자열 오류 [중복]

나는 다음 오류를 이해하려고 몇 시간을 보냈습니다.

내 스크립트

CMD="sh -c 'echo \"a\"'"
$CMD

실수:

"a"': 1: "a"': Syntax error: Unterminated quoted string

물론 이렇게 하고 echo $CMD결과를 붙여넣으면 예상대로 작동합니다...

오류가 발생한 이유는 무엇입니까?

편집하다:

해결 방법이 아닌 설명을 요청합니다. 그래서 다음 링크가 내 질문에 대답하지 않는다고 생각합니다. 함수 내에서 참조하면 오류가 발생합니다.

답변1

이것은 작동하지 않습니다. 쉘이 단어 분할을 수행하면 다음을 얻게 됩니다.4개논쟁:

sh
-c
'echo
"a"'

이렇게 하려면 bash 배열을 사용해야 합니다.

cmd=( sh -c 'echo "a"' )
"${cmd[@]}"

답변2

여기서 가장 큰 실수는 주변의 작은 따옴표가 'echo \"a\"'쉘 실행의 "단어 분리"를 중지하고 echo "a"이를 단일 인수로 sh에 전달한다고 생각하는 것입니다.

이 경우 작은따옴표는 바깥쪽 큰따옴표로 묶여 있기 때문에 실제로 "문법적"이 아닌 "문자적"으로 간주됩니다!

다음 링크가 나에게 가장 큰 도움이 되었습니다.http://mywiki.wooledge.org/Arguments

관련 정보