질문이 있습니다. 나는 그것을 얻지 않는다ksh88과 ksh93이 닫히지 않은 백틱을 허용하는 이유는 무엇입니까?
내가 입력 한 이유를 때
echo "`date -d 20121231 +"%B
이 오류없이 실행 :
December
왜 성공적 때 개방
` 실행
끝에서 닫히지 않습니까? Korn Shell 88 및 93 모두에서 작동합니다.
질문이 있습니다. 나는 그것을 얻지 않는다ksh88과 ksh93이 닫히지 않은 백틱을 허용하는 이유는 무엇입니까?
내가 입력 한 이유를 때
echo "`date -d 20121231 +"%B
이 오류없이 실행 :
December
왜 성공적 때 개방
` 실행
끝에서 닫히지 않습니까? Korn Shell 88 및 93 모두에서 작동합니다.
David Korn이 결정한 (의도적 인 경우) 의사 결정이었습니다.
외부 군대에 의한이 동작에 대한 요구 사항은 없습니다. 이전 버전과의 호환성 요구 사항은 없습니다. 표준 준수 이유가 없다. (ksh88이 나왔을 때 POSIX sh는 아직 표준화되지 않았다.)
불특정 행동 (문서화 된 의미를 깨지 못하도록 구현하지 않는 행위)의 근거가있는 경우 그 이유에 대해 확실한 답을 줄 수있는 유일한 사람은이 셸의 작성자입니다.
이것은'ksh' 구현에서 버그의 모든 특징을 가지고 있습니다; man 페이지에서이 동작에 대한 참조를 찾을 수 없으며'echo "x'와'echo \'ls'와 같은 다른 예가 예상대로 동작합니다. 다른'ksh' 버전'pdksh' 및'mksh'도 사용하지 않습니다. 이 동작을 나타낼 수 없습니다.) – Carpetsmoker
버그? 문서화되지 않은 동작? 한 번만 말할 수 있으며 여기에없는 것입니다. 즉, 버그가 발생했을 가능성이 큽니다. 제 표현을 적절하게 수정했습니다. –
이것은 의도적 인 것이 불가능한 것은 아니지만, 이상하고 일관성없는 동작이 의도적 인 것보다 버그가 * 더 * 더 쉬울 것으로 생각됩니다. sh_lex에서의 구문 분석은 최대 8 레벨의 중첩을 가진 1200 함수입니다. 그것은 버그가 생길 것입니다 ... 그런데 질문의 제목을 편집했고, "닫히지 않은 백틱"과 같은 것이 아니며, ""는 백틱 전에 시작하고 명령이 끝나기 전에 닫힙니다 * ... 이것은 어떤 경우에도 잘못되었으며, 아마도 sh_lex()가 혼란 스러울 때 * 여길 것이다. – Carpetsmoker
어떤 셸을 사용하고 있습니까? –
어떤 셸? zsh는 그것을 좋아하지 않는다 :) – Doon
이것은 나를위한 bash-as-sh 또는'csh'와 함께'bash' (3 가지 다른 버전)에서 올바르게 실행되지 않습니다. –