当我给它“-”作为参数时会有奇怪的行为

时间:2019-01-24 21:44:36

标签: linux unix

当我执行ls --时:

$ls --
a.out       ft_ls.c     ft_ls.h     ft_ls.h.gch libft`

它显示当前目录的内容,
但是单独的-被解释为一个名为'-'的目录:

$ls -
ls: -: No such file or directory

ls ---是非法标志:

$ls ---
ls: illegal option -- -
usage: ls [-ABCFGHLOPRSTUWabcdefghiklmnopqrstuwx1] [file ...]

,我能知道为什么默认情况下---没有被解释为文件名吗?

2 个答案:

答案 0 :(得分:2)

--作为“选项结束”的标记有特殊含义;而----没有这种特殊含义。

POSIX约定如下:

  

第一个非选项参数的参数应为   被接受为指示选项结束的定界符。任何以下   参数应视为操作数,即使它们以   “-”字符。

如果要实现ls,则可能对使用getopt函数感兴趣,并且可以轻松实现与ls命令类似的选项处理。

答案 1 :(得分:0)

在某些情况下,您必须运行ls --命令。

如果您有任何以破折号(-)开头的文件,例如-file.pdf,则为1;将ls与任何选项一起使用将导致错误。您将需要使用带双破折号ls --的ls,它告诉Linux在带破折号之后忽略所有其他内容,然后键入带有*的文件名。

您可以使用ls -- *.pdf显示目录内容。