我正在尝试使用getopt来获取'*'字符
ls \*
或
ls \*.c
我正在为自己的ls
命令使用此命令,试图添加对globbing的支持。下面是我尝试使用getopt命令的代码。
while ((c = getopt(argc, argv, "*laFi1i")) != -1) {
switch (c) {
case 'l' : L = 1; break;
case 'a' : A = 1; break;
case 'F' : F = 1; break;
case 'i' : I = 1; break;
case '1' : ONE = 1; break;
case '*' : GLOB = 1; break;
}
}
为什么当我尝试使用开关盒时却什么也没找到?
谢谢
答案 0 :(得分:0)
可以使用类似的方法来获取命令行标志-a
或-F
以及其他参数*.c
*.c
将被扩展为所有扩展名为.c
的文件名。如果有10个匹配的文件,则argc
将为12。
命令行可能看起来像./pgm -a *.c
#include <stdio.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
int flaga = 0;
int flagF = 0;
int flagi = 0;
int flagl = 0;
int flag1 = 0;
int c = 0;
int each = 0;
if ( argc == 1) {
fprintf(stderr, "Usage:\t%s [-a] [-F] [-i] [-l] [-1] [arg...]\n", argv[0]);
return 1;
}
while((c = getopt(argc, argv, "laFi1")) != -1) {
switch(c) {
case 'a':
flaga = 1;
break;
case 'F':
flagF = 1;
break;
case 'i':
flagi = 1;
break;
case 'l':
flagl = 1;
break;
case '1':
flag1 = 1;
break;
default:
fprintf(stderr
, "Usage:\t%s [-a] [-F] [-i] [-l] [-1] [arg...]\n"
, argv[0]);
return 1;
}
}
if ( flaga) {
printf ( "processed: -a\n");
}
if ( flagF) {
printf ( "processed: -F\n");
}
if ( flagi) {
printf ( "processed: -i\n");
}
if ( flagl) {
printf ( "processed: -l\n");
}
if ( flag1) {
printf ( "processed: -1\n");
}
if ( optind < argc) {
for ( each = optind; each < argc; each++) {
printf ( "argv[%d] %s\n", each, argv[each]);
}
}
return 0;
}