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

parse command line arguments in a different order

本文关键字:命令行 参数 顺序      更新时间:2023-10-16

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

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

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

我的问题是,我如何以如下顺序执行程序:file1.ext1 file1.ext2 file2.ext1 file2.ext2…我可以从命令行处理它吗?还是需要在代码中处理它?

如果文件名的格式真的是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

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

或者,您也可以调整可执行文件以正确顺序处理命令行参数,但如果您已经有了可执行文件,我建议您使用第一种解决方案。

edit:这个命令也按词法排序:

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