我正在尝试在C中复制“ls”命令。它应该占用0到2个参数之间的任何值,即文件路径和一组标志。当传递1个参数时,我试图区分传递文件和传递一组标志 - 我认为显而易见的方法是假设没有文件名以“ - ”字符开头,因此,如果参数的第一个字符是“ - ”,则将其视为一组标志,否则将其视为文件路径。
我该如何区分这两者?
答案 0 :(得分:2)
嗯,ls的规则是 - 考虑int
是一个文件:
-a
:ls -a
被视为选项参数; -a
:ls -- -a
被视为文件参数 -a
参数被视为分隔符,之后所有参数都是文件,而不是选项。
答案 1 :(得分:2)
通常,程序不,并留给用户处理由此产生的问题。
例如,创建一个名为MySQLdb.connect()
的文件和至少一个其他文件,然后运行-l
:
ls *
me@localhost:~$ mkdir temp
me@localhost:~$ cd temp
me@localhost:~/temp$ touch ./-l
me@localhost:~/temp$ touch testfile
me@localhost:~/temp$ ls *
-rw-rw-r-- 1 acampbell acampbell 0 Apr 4 11:00 testfile
me@localhost:~/temp$
已扩展为ls *
。
大多数Unix实用程序可以接受参数 - 并且ls -l testfile
之后的每个参数都将被视为文件名:
--
他们还可以指定不以me@localhost:~/temp$ ls -l -- testfile
-rw-rw-r-- 1 acampbell acampbell 0 Apr 4 11:00 testfile
me@localhost:~/temp$ ls -- -l testfile
-l testfile
me@localhost:~/temp$
开头的路径,例如使用冗余-
:
./