그래서 저는 C로 기본 UNIX 미니 쉘을 프로그래밍하고 있습니다. 그러나 모든 것이 순조롭게 진행되고 있지만, 최근 콘솔에서 가져온 원래 문자열의 인수를 구문 분석하는 방식을 다시 생각합니다. 인수 배열은 다음과 같습니다 C UNIX 쉘 execvp 따옴표 붙이기
$> echo HELLO "" WORLD!
HELLO "" WORLD!
: [! echo0, HELLO0 ","0 WORLD 0]
내가 지금처럼 전달합니다
execvp(args[0], args);
여기가 구문 분석하는 방식의 예
그러나 echo는 따옴표를 생략하고 사용자가 볼 수있는 것처럼 출력합니다. 필자의 경우 echo는 내장 명령이 아니기 때문에 인쇄 방법을 사용자 정의 할 수는 없습니다. 왜 이런 일이 일어날 지 아무도 몰라? 큰 따옴표를 생략하고 싶지만 다른 모든 종류의 문자를 포함하고 싶습니다 (물론 null도 제외). 그러나 빈 문자열 때문에, 인수 자체로 계산 :
echo HELLO "" WORLD!
해야 출력 : 아니, 그 사이에
HELLO WORLD!
2 공간 : 단 하나
HELLO WORLD!
(AN 이후 빈 문자열은 인수입니다).
너무 혼란스럽지 않기를 바랍니다. 너희들에게 명확한 설명이 필요하면 부탁한다. 나는 코드를 게시하게되어 기쁘다.
흠, 그래서 따옴표를 직접 제거하여 exec *에 전달해야합니까? – robins35
빈 문자열의 경우는 어떻게됩니까? 어떻게 표현할 수 있습니까? – robins35
@Scriptonaut 예제를 사용하여 :'[echo0, HELLO0, 0, WORLD! 0]'. –