如果我以通配符作为命令行参数输入路径,如:
testprogramm a* b*
该目录包含以下内容:
aa ab ba bb
我的argv字符串将包含:
{"testprogramm","aa","ab","ba","bb"}
但是,我想区分起源于第一个参数(a*)和第二个参数(b*)的文件,我如何做到这一点?我正在寻找的是一种方法,它可以通过上面的例子告诉我,"aa"和"ab"来自第一个参数,"ba"和"bb"来自第二个参数。
我知道cp.c命令可以做到这一点,但我不知道如何做到这一点,因为源代码是非常嵌套的。
编辑:标准副本(来自gnu核心实用程序)无法区分,只有嵌入(shell,其中的程序和实用程序是相同的文件)才能区分。
发布于 2022-08-08 14:38:35
./program a* "|" b*然后从程序中搜索分隔符:
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
int group = 0;
for (int i = 1; i < argc; i++)
{
if (strcmp(argv[i], "|") == 0)
{
group++;
}
else
{
printf("group: %d file: %s\n", group, argv[i]);
}
}
return 0;
}产出如下:
group: 0 file: aa
group: 0 file: ab
group: 1 file: ba
group: 1 file: bb发布于 2022-08-08 14:30:12
解决这个问题没有真正的解决方案,至少使用bash是这样的,因为它提供的有关argv的唯一信息是argv本身和argc。但是,由于输入是在每个参数基上排序的,所以可以检查第一个参数没有排序,所以它可以从另一个角度(b*和a*)检测它,但是没有真正的解决方案,除非从bash更改为像toybox或busybox这样的嵌入式util框。
https://stackoverflow.com/questions/73279156
复制相似问题