例如,如果用户在命令行中键入
在
中匹配“hello”test *
表示在所有.in类型的文件中找到名为“test”的文件中的“the”。
bool containMany=false;
int i;
for(i= 0; arguments[i]; i++){
printf("ARGUMENTS %s\n",arguments[i]);
if(strstr(arguments[i],"*")){
containMany=true;
break;
}
}
但它不起作用。论点是:
ARGUMENT匹配
ARGUMENT你好
ARGUMENT test0.in
ARGUMENT test1.in
ARGUMENT test2.in
所以当用户输入“*”?
时,如何使containsMany变为true答案 0 :(得分:2)
那是因为你的shell会自动进行全局样式的替换。如果您不希望shell将输入参数括在单引号中或使用反斜杠。
如果你的工作目录有文件A和B,则表达式为:
test *
将替换为
test A B
在测试执行之前。
另一方面,如果你这样跑:
test '*'
或者像这样:
test \*
然后就没有shell替换,你的程序实际上会看到这个星。
答案 1 :(得分:0)
传统上,shell在命令行上执行通配符扩展 - 这就是在Unix风格的平台上完成的方式。如果不需要扩展,用户通常必须引用包含通配符的参数或者转义那个通配符。
在Windows上,command.com
/ cmd.exe
shell执行而不是执行文件名扩展。但是:
CRT_noglob.o
或将零初始化的全局变量int _CRT_glob = 0;
添加到您的.c文件之一以禁用运行时的glob扩展。setargv.obj
,如果这是您想要的行为,将导致运行时扩展命令行文件名通配符。