2016-04-03 49 views
0

我试图复制“ls”的命令下应该采取之间的任何0和2个参数,它们是文件路径和一组标志的冲突。当1个参数传递,我想传递一个文件并通过一组标志来区分 - 我还以为明显的路要走,它是假设没有文件名称以“ - ”字符等,因此,如果参数的第一个字符是“ - ”,然后把它作为一组标志,否则把它当作一个文件路径。使用“ - ”开始的文件,而不是与标志

我应如何真正区分这两个?

+2

'--'用于结束开关并消除模糊性。否则'ls'只是假设开关。 –

+2

不要写自己的一切。使用'getopt'库。 – Olaf

回答

2

良好,LS的规则是 - 考虑-a是一个文件:

  • ls -a-a被认为是一个选项参数;
  • ls -- -a-a被视为一个文件参数

--说法被认为是一个分隔符,之后所有的参数都是文件,而不是选择。

+0

完美,谢谢:) – bhope

2

通常,程序不需要,并将其留给用户处理所导致的问题。

例如,创建一个名为-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$ 
+0

那,真是有趣的现象,谢谢你解释这:) – bhope

相关问题