Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C语言中,处理多个类似列表的参数的典型方法是什么?_C_Unix_Command Line Arguments_Filenames - Fatal编程技术网

在C语言中,处理多个类似列表的参数的典型方法是什么?

在C语言中,处理多个类似列表的参数的典型方法是什么?,c,unix,command-line-arguments,filenames,C,Unix,Command Line Arguments,Filenames,假设我有一个名为combine的程序,它接受红色、绿色和蓝色类型文件的输入,生成一个输出文件,比如说color.jpg。。。但每种类型的数量都是任意的。我们还假设,除了通过用户如何对文件进行分类之外,无法确定文件的类型。在这种情况下人们通常做什么 例如,在命令行上,一些方法可能是: command red1,red2,red3 green1,green2 blue1 color.jpg 如果文件名中可能出现逗号,则此逗号方法将失效。这是我最喜欢的方法。另一个想法是 command "red1

假设我有一个名为combine的程序,它接受红色、绿色和蓝色类型文件的输入,生成一个输出文件,比如说color.jpg。。。但每种类型的数量都是任意的。我们还假设,除了通过用户如何对文件进行分类之外,无法确定文件的类型。在这种情况下人们通常做什么

例如,在命令行上,一些方法可能是:

command red1,red2,red3 green1,green2 blue1 color.jpg
如果文件名中可能出现逗号,则此逗号方法将失效。这是我最喜欢的方法。另一个想法是

command "red1 red2 red3" "green1 green2" "blue1" color.jpg
但这种方法在名称中使用空格时也有问题

我还需要ASCII文件,其中包含给出每种类型文件的列表:

command redlist greenlist bluelist color.jpg
但这需要拖拽额外的文件


进一步的想法?有没有一种标准的LINUX方法可以做到这一点?

标准方法是:

command --red red1.jpg --red red2.jpg --blue blue1.jpg
有简短的选项:

command -r red1.jpg -r red2.jpg -b blue1.jpg
使用bash速记:

command -r={red1,red2}.jpg -b blue1.jpg
上面的代码由shell扩展,因此看起来与前面的调用类似


这样做可以避免文件名中没有逗号之类的任意限制,还可以使您的程序更易于与标准*nix实用程序(如xargs等)进行互操作

标准方法是:

command --red red1.jpg --red red2.jpg --blue blue1.jpg
有简短的选项:

command -r red1.jpg -r red2.jpg -b blue1.jpg
使用bash速记:

command -r={red1,red2}.jpg -b blue1.jpg
上面的代码由shell扩展,因此看起来与前面的调用类似


这样做可以避免文件名中没有逗号之类的任意限制,还可以使您的程序更易于与标准*nix实用程序(如xargs等)进行互操作

另一种方式是接受:

command -r redfile1 redfile2 -b bluefile1 blue2 blue2 -g green1
以便:

command -r red* -b blue* -g green*

是可能的。

另一种方式是接受:

command -r redfile1 redfile2 -b bluefile1 blue2 blue2 -g green1
以便:

command -r red* -b blue* -g green*

是可能的。

请注意,最后一个要求程序接受-r=red1,相当于-r red1.True。如果没有,只需说-r{red1,red2}.jpg-省略等号稍微有点难看,但在不同的命令行参数库中可能更便于移植。这要求程序接受单个参数-rred1作为两个参数-r red1的同义词。对于简短的选择,我不认为这是典型的-abc通常指-a-b-c。但是长选项通常接受带有=:-red={red1,red2}的参数。jpgI认为大多数命令行处理器确实支持-rred类型的东西,因为它们知道-r需要参数。事实上,在调用编译器时,-I eye或-l ell之后没有空格实际上是正统的。请注意,最后一个要求程序接受-r=red1,将其等效为-r red1.True。如果没有,只需说-r{red1,red2}.jpg-省略等号稍微有点难看,但在不同的命令行参数库中可能更便于移植。这要求程序接受单个参数-rred1作为两个参数-r red1的同义词。对于简短的选择,我不认为这是典型的-abc通常指-a-b-c。但是长选项通常接受带有=:-red={red1,red2}的参数。jpgI认为大多数命令行处理器确实支持-rred类型的东西,因为它们知道-r需要参数。事实上,调用编译器时在-I-eye或-l-ell之后没有空格实际上是佳能的做法。您可以通过特别的命令行处理来实现这一点,但如果您使用足够高级别的标准库,这样做实际上可能需要更多的工作,因为它不是很典型,你能说出一个这样做的标准程序吗?我完全同意,但我不知道为什么这不是标准的,或者至少是普通的:我真的很喜欢这个答案,希望我也能做到。你可以通过特别的命令行处理来做到这一点,但是如果你使用一个足够高级别的标准库,这样做实际上可能需要更多的工作,因为它不是很典型。你能说出一个这样做的标准程序吗?我完全同意,但我不知道为什么这不是标准的,或者至少是普通的:我真的很喜欢这个答案,希望我也能做到。