我试图复制“ls”的命令下应该采取之间的任何0和2个参数,它们是文件路径和一组标志的冲突。当1个参数传递,我想传递一个文件并通过一组标志来区分 - 我还以为明显的路要走,它是假设没有文件名称以“ - ”字符等,因此,如果参数的第一个字符是“ - ”,然后把它作为一组标志,否则把它当作一个文件路径。使用“ - ”开始的文件,而不是与标志
我应如何真正区分这两个?
我试图复制“ls”的命令下应该采取之间的任何0和2个参数,它们是文件路径和一组标志的冲突。当1个参数传递,我想传递一个文件并通过一组标志来区分 - 我还以为明显的路要走,它是假设没有文件名称以“ - ”字符等,因此,如果参数的第一个字符是“ - ”,然后把它作为一组标志,否则把它当作一个文件路径。使用“ - ”开始的文件,而不是与标志
我应如何真正区分这两个?
良好,LS的规则是 - 考虑-a
是一个文件:
ls -a
:-a
被认为是一个选项参数;ls -- -a
:-a
被视为一个文件参数的--
说法被认为是一个分隔符,之后所有的参数都是文件,而不是选择。
完美,谢谢:) – bhope
通常,程序不需要,并将其留给用户处理所导致的问题。
例如,创建一个名为-l
文件,以及至少一个其他的文件,然后运行ls *
:
[email protected]:~$ mkdir temp
[email protected]:~$ cd temp
[email protected]:~/temp$ touch ./-l
[email protected]:~/temp$ touch testfile
[email protected]:~/temp$ ls *
-rw-rw-r-- 1 acampbell acampbell 0 Apr 4 11:00 testfile
[email protected]:~/temp$
ls *
扩大到ls -l testfile
。
大多数Unix工具可以采取的参数 - 和每次吵架--
后,将被视为一个文件名:
[email protected]:~/temp$ ls -l -- testfile
-rw-rw-r-- 1 acampbell acampbell 0 Apr 4 11:00 testfile
[email protected]:~/temp$ ls -- -l testfile
-l testfile
[email protected]:~/temp$
他们还可以指定路径不以-
开始,这样的通过使用冗余./
:
[email protected]:~/temp$ ls ./*
./-l ./testfile
[email protected]:~/temp$
那,真是有趣的现象,谢谢你解释这:) – bhope
'--'用于结束开关并消除模糊性。否则'ls'只是假设开关。 –
不要写自己的一切。使用'getopt'库。 – Olaf