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=Harvey와 Lo단어 로 나누지 않도록 지시 합니다.
— grawity

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