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
.