ksh 큰 따옴표 및 변수


0

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

답변:


1

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

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;
}

고마워, 내가 시도 할 것이다, 나는 이전의 일부 실례에서 인용 된 방식을 읽었다. 그들이 왜 그런지 잘 모르겠습니다 .... 실제로 그것들은 CN, O, OU입니다 .... 그러나, 나는 당신이 말한 첫 번째 2가 어떻게 동등한 지 이해하지 못합니다 ... 첫 번째는 너무 많은 것 같습니다 -( ") 큰 따옴표, 더 자세히 설명해 주실 수 있습니까?

1
@AntonyLee : 큰 따옴표는 한 가지만 수행합니다. 쉘이 각 공간에서 인수를 단어로 나누는 것을 방지하며 쉘이 실제로 스크립트를 실행하기 전에 항상 제거됩니다. 그래서 인수가 인용 방법을 정확하게 중요하지 않습니다 - 그것은 될 수 "First=Harvey Lo"또는 First="Harvey Lo"심지어 First=Harvey" "Lo그것은 여전히 같은를 의미 할 것입니다. 따옴표는 쉘에 별도의 단어 First=HarveyLo단어 로 나누지 않도록 지시 합니다.
grawity

감사합니다. "Hello"는 "HE" "" "" "" ""llo "와 동일합니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.