나는 다음 오류를 이해하려고 몇 시간을 보냈습니다.
내 스크립트
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