프로그램 매개변수의 구분 기호?

프로그램 매개변수의 구분 기호?

C 프로그램 인수를 구분하는 구문은 무엇입니까? 예를 들어, 다음을 입력하면:

./myprogram 1 2 3 | grep result

인수로 해석 됩니다 | grep result(및 로 전달됨 argv). 그렇다면 후속 논쟁을 어떻게 끝내야 할까요 3?

답변1

나는 이것이 사실이 아니라고 생각합니다. 쉘은 명령줄 인수를 해석하고 이를 구문 분석할 때 적절한 명령에 전달하는 역할을 담당합니다.

따라서 C 프로그램이 최종적으로 실행되면 매개변수 1, 2, 3만 표시됩니다. 파이프와 뒤따르는 모든 것은 쉘의 책임이며 C 프로그램에 인수로 전달되지 않습니다.

아래는 bash 쉘과 bash 쉘 스크립트를 사용한 예입니다.

예(셸 스크립트)

예제 스크립트 test.bash:

#!/bin/bash

file=somefile
[ -f $file ] && rm $file
for var in "$@"
do
  echo "$var" >> $file
done

cat $file

이제 스크립트를 실행하면 결과가 파일에 저장됩니다 somefile.

$ ./test.bash 1 2 3 '4 5'
1
2
3
4 5

추가 명령줄 인수를 사용하여 실행합니다.

$ ./test.bash 1 2 3 '4 5' | echo hi
hi

$ cat somefile 
1
2
3
4 5

두 경우 모두 스크립트는 test.bash파이프(|)로 이어지는 인수만 봅니다. Bash 셸은 명령 구문 분석을 담당하므로 나중에 파이프(|)를 포함하여 아무 것도 표시되지 않습니다.

예제(C 프로그램)

쉘 스크립트 사용에 대해 질문이 있는 경우 명령줄 인수를 허용하는 ac 프로그램이 있으며 동일한 동작을 볼 수 있습니다.

c 프로그램의 이름은 다음과 같습니다 testc.c.

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  printf("Program name: %s\n", argv[0]);

  while ((argc > 1))
  {
    printf("%s\n",&argv[1][0]);

    ++argv;
    --argc;
  }
  return (0);
}

다음과 같이 컴파일하세요.

gcc testc.c -o testc

다음과 같이 사용하세요:

./testc
1
2
3
4 5

$ ./testc 1 2 3 '4 5' | echo hi
hi

위에서는 처음 4개의 매개변수만 내 C 프로그램인 testc.

관련 정보