当我执行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 ...]
,我能知道为什么默认情况下---
没有被解释为文件名吗?
答案 0 :(得分:2)
--
作为“选项结束”的标记有特殊含义;而---
或-
没有这种特殊含义。
POSIX约定如下:
第一个非选项参数的参数应为 被接受为指示选项结束的定界符。任何以下 参数应视为操作数,即使它们以 “-”字符。
如果要实现ls
,则可能对使用getopt
函数感兴趣,并且可以轻松实现与ls
命令类似的选项处理。
答案 1 :(得分:0)
在某些情况下,您必须运行ls --
命令。
如果您有任何以破折号(-
)开头的文件,例如-file.pdf
,则为1;将ls与任何选项一起使用将导致错误。您将需要使用带双破折号ls --
的ls,它告诉Linux在带破折号之后忽略所有其他内容,然后键入带有*的文件名。
您可以使用ls -- *.pdf
显示目录内容。