BASH: разница между параметрами «-» и «-»

Я работал над учебником по сценарию «Шелл» (Bash) и имел следующие сомнения:

  • Я наткнулся на команду ls
  • На странице man ls перечислены несколько случаев использования:

    ls -a
    ls --block-size='M'

Мой вопрос :

  • В чем разница в - и -- ?
  • Почему существуют 2 номенклатуры?
  • Какова мотивация этого?

--foo long-form ( --foo ) – это расширение GNU – что-то присутствует в GNU ls , но вообще не присутствует в стандартных требованиях к стандарту POSIX для инструментов UNIX, поэтому другие версии ls не обязаны поддерживать эти параметры. В этом случае смысл слова ( foo ) имеет смысл. Эта номенклатура была добавлена ​​совсем недавно и более выразительна, чем краткая форма (и не имеет ограничений пространства имен).

Варианты короткой формы ( -al ) по меньшей мере в форме стандартизированы (хотя расширения могут добавлять новые). Они обрабатываются персонажем по символу, по одной букве за раз – значит -a (показать скрытые файлы) и -l (длинный вывод), вместо того, чтобы иметь в своем случае собственный смысл. Это оригинальный синтаксис для параметров командной строки UNIX и, таким образом, поддерживается не только для удобства, но и для обратной совместимости.

Они оба выполняют одну и ту же задачу: передавая параметры вызываемой программе. Существует не так много способов сделать это, как и стандартный способ: это два основных, известных как короткий вариант и длинный вариант (стиль GNU).
Программе не нужно реализовывать их оба, хотя способ, как это обычно делается, позволяет обрабатывать их как уникальные.