Как правило:
- означает чтение аргумента / содержимого из STDIN (дескриптор файла 0) -- означает конец параметров команды, все последует за аргументамиЗачем нужно:
О -:
$ echo foobar | cat -
foobar
Хотя cat может читать содержимое из STDIN, не требуя -, многим командам необходимо это и их man
Теперь о --, я создал файл -spam, давайте cat файл:
$ echo foobar >-spam
$ cat -spam
cat: invalid option -- 'p'
Try 'cat --help' for more information.
$ cat -- -spam
foobar
Без --, [ f13] принимает s, p, a, m все как опции, поскольку они следуют -, -- явно указывает конец опций, после чего -spam принимается как имя файла.