Странное поведение, когда я даю это `-` в качестве аргумента - PullRequest
0 голосов
/ 25 января 2019

Когда я выполняю ls --:

$<strong>ls --</strong>
a.out       ft_ls.c     ft_ls.h     ft_ls.h.gch libft`

отображает содержимое текущего каталога,
, но только - интерпретируется как каталог с именем '-':

$<strong>ls -</strong>
ls: -: No such file or directory

и ls --- - недопустимый флаг:

$<strong>ls ---</strong>
ls: illegal option -- -
usage: ls [-ABCFGHLOPRSTUWabcdefghiklmnopqrstuwx1] [file ...]

и можно ли узнать, почему --- по умолчанию не интерпретируется как имя файла?

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Есть несколько случаев, когда вам нужно выполнить команду ls --.

Вот один из них, если у вас есть файл, начинающийся с тире (-), например -file.pdf;использование ls с любой опцией приведет к ошибкам.Вам нужно будет использовать ls с двойной чертой ls --, которая говорит Linux игнорировать все остальное после того, как у него есть тире, а затем введите имя файла с помощью *.

Вы можете использовать ls -- *.pdf для отображения содержимого вашего каталога.

0 голосов
/ 25 января 2019

-- имеет особое значение в качестве маркера «конца опций»; тогда как --- или - не имеет такого особого значения.

POSIX Конвенция гласит:

Первый аргумент, который не является аргументом option, должен быть принимается в качестве разделителя, обозначающего конец опций Любое следующее аргументы должны рассматриваться как операнды, даже если они начинаются с '-' символ.

Если вы реализуете ls, то вам может быть интересно использовать функцию getopt, и вы можете легко реализовать обработку параметров, аналогичную команде ls.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...