以不同的顺序解析命令行参数

时间:2014-04-29 10:56:21

标签: c++ bash command-line-arguments

我有一个小的C ++程序,它从bash中读取参数。 假设我有一个包含两个不同扩展名的文件的文件夹。 示例:file1.ext1 file1.ext2 file2.ext1 file2.ext2 ...

如果我使用此命令执行程序:./readargs *.ext1 它将使用ext1读取所有文件。

如果我执行./readargs *.ext1 *.ext2,它将读取所有.ext1文件,然后读取所有.ext2文件。

我的问题是如何以这种顺序读取的方式执行程序:file1.ext1 file1.ext2 file2.ext1 file2.ext2 ...我可以从命令行处理它还是我需要处理它在代码中?

1 个答案:

答案 0 :(得分:1)

如果您的文件名称的格式为file1.ext1 file1.ext2 file2.ext1 file2.ext2,则可以使用

进行排序
echo *.{ext1,ext2}|sort -u

以上给出了输出:

$ ll | grep ext
23880775    0 -rw-r--r--  1 user users    0 Apr 29 13:28 file1.ext1
23880789    0 -rw-r--r--  1 user users    0 Apr 29 13:28 file1.ext2
23880787    0 -rw-r--r--  1 user users    0 Apr 29 13:28 file2.ext1
23880784    0 -rw-r--r--  1 user users    0 Apr 29 13:28 file2.ext2
$ echo *.{ext1,ext2} | sort -u
file1.ext1 file2.ext1 file1.ext2 file2.ext2

然后复制输出并调用程序。但是,如果您确实需要在.ext1的文件之前使用.ext2的文件,那么您必须确保.ext1在字母上低于.ext2或使用另一种排序标准。

除此之外,您还可以调整可执行文件以正确的顺序处理命令行参数,但如果您已经有可执行文件,我建议您使用第一个解决方案作为解决方法。

编辑:此命令也可以词法排序:

$echo *.ext[1,2]
$file1.ext1 file1.ext2 file2.ext1 file2.ext2