Страница руководства bash (1) для 4.1.5 (1) сообщает:
-- If no arguments follow this option, then the positional
parameters are unset. Otherwise, the positional parame‐
ters are set to the args, even if some of them begin
with a -.
- Signal the end of options, cause all remaining args to
be assigned to the positional parameters. The -x and -v
options are turned off. If there are no args, the posi‐
tional parameters remain unchanged.
Первое различие заключается в том, что после -
или --
нет аргументов. Для первых существующие позиционные параметры будут неизменными. Для последнего, позиционные параметры будут очищены.
Таким образом, set --
очищает позиционные параметры, а set -
является запретом.
Настройки -v
и -x
могут быть изменены с помощью set - ...
. Итак, если вы включили set -v
(что приводит к тому, что оболочка печатает строки ввода при их чтении), она будет отключена командой set - ...
. set -- ...
оставит это без изменений.
set -x
встречается чаще, чем set -v
, поскольку set -x
часто используется для отладки сценариев, чтобы точно узнать, какие команды выполняются. Довольно часто при отладке сценария оболочки вы запускаете его с bash -x <script>
. Зная, что set - ...
отключает -x
, вы, вероятно, захотите использовать set -- ...
, поскольку было бы совершенно неожиданно отключить -x
в качестве побочного эффекта другой команды.