ksh 큰 따옴표 및 변수 실행해야합니다. SomeScripts.sh “First=Harvey

KSH 문제입니다.

오늘 변수와 따옴표에 문제가 있습니다. 순서는 중요하지 않지만 스크립트를 읽을 수는 없지만 실행해야합니다.

SomeScripts.sh "First=Harvey Lo","Third=Rebecca Won","Second=laugh at"

결과 :

Harvey Lo laugh at Rebecca Won

하지만 ksh 스크립트 파일에 넣으려고하면 작동하지 않습니다.

#!/bin/ksh
SOMEVAR=\"First=Harvey Lo\",\"Third=Rebecca Won\",\"Second=laugh at\"
SomeScripts.sh ${SOMEVAR}

결과 :

Error: No. of ARGS > 3

나는 심지어 다음을 시도하지만 여전히 작동하지 않습니다.

#!/bin/ksh
SOMEVAR=\"First=Harvey Lo\",\"Third=Rebecca Won\",\"Second=laugh at\"
SomeScripts.sh `echo ${SOMEVAR}`

결과 :

Error: No. of ARGS > 3

누구나 도울 수 있습니다. 모두 SomeScripts.sh 내에 Java가 있다는 것을 알고 있습니다. 실제 함수에는 20 개 이상의 매개 변수가 있지만 표시된 것처럼 단순화되었습니다.

원본 도움말 파일 :

SomeScripts.sh First=Harvey,Third=Rebecca,Second=laugh
Harvey laugh Rebecca


답변

첫 번째 예제에는 매개 변수가 하나만 있으며이를 인용하는 방식은 세부 사항 일뿐입니다. 이것들은 동일합니다 :

SomeScripts.sh "First=Harvey Lo","Third=Rebecca Won","Second=laugh at"

SomeScripts.sh "First=Harvey Lo,Third=Rebecca Won,Second=laugh at"

따라서 작동시키는 방법 은 변수 에 넣지 않는 것입니다. \"대신 변수를 설정하는 동안 인용해야합니다.

SOMEVAR="First=Harvey Lo","Third=Rebecca Won","Second=laugh at"

다시, 이것은 간단한 것과 같습니다

SOMEVAR="First=Harvey Lo,Third=Rebecca Won,Second=laugh at"

또한 변수를 사용할 때 인용해야합니다. 그렇지 않으면 확장 된 후 단어가 쪼개 질 수 있습니다. (여기서 단어를 나누는 것은 공백으로 나누는 것을 의미합니다.) 똑같이 ` `대체 에도 적용됩니다 .

SomeScripts.sh "$SOMEVAR"

이 프로그램을 컴파일하고 다르게 인용 된 인수로 실행 해보십시오. 인수로받는 것을 정확하게 보여줍니다.

#include <stdio.h>
int main(int argc, char *argv[]) {
    printf("argc = %d\n", argc);
    for (argc=0; argv[argc]; argc++)
        printf("argv[%d] = %s\n", argc, argv[argc]);
    return 0;
}