Я хочу вызвать /bin/sh и использовать параметр -c для передачи команды "+ x" , то есть для выполнения программы с именем "+ x" , имя которой начинается со знака "плюс".
Так как "+ x" интерпретируется как /bin/sh как опция (в частности, отключить опцию "x" ),/bin/sh следует запретить интерпретировать его как параметр. Я получаю следующие различные результаты в зависимости от используемого /bin/sh:
(1) Первый вариант:
/bin/sh -c -- +x
Использование Dash и Bash в Linux: выполняется команда + x.
Использование FreeBSD sh: выполняется команда - и устанавливается опция + x.
(2) Второй вариант:
/bin/sh -c +x
Использование Dash и Bash в Linux: параметр + x установлен, и есть ошибка, потому что в опции -c отсутствует аргумент.
Использование FreeBSD sh: выполняется команда + x.
(3) Третий вариант:
/bin/sh -c - +x
Использование Dash и Bash в Linux: + x выполняется.
Использование FreeBSD sh: выполняется команда - и устанавливается опция + x.
(4) Четвертый вариант: (ADDED, как указано в комментариях)
/bin/sh -c+x
Использование Dash и Bash в Linux: Неверный/Нелегальный вариант "+"
Использование опции FreeBSD sh: Bad -c
Мой вопрос: что задает POSIX?
Я читаю спецификацию POSIX для sh здесь: http://pubs.opengroup.org/onlinepubs/9699919799/utilities/sh.html
Цитата из этого: "Один дефис рассматривается как первый операнд, а затем игнорируется. Если оба параметра" - "и" - "указаны в качестве аргументов или если другие операнды предшествуют одному дефису, результаты undefined".
Я не уверен, относится ли эта цитата к одной тире, помещенной сразу после '-c'.
Итак, какой из них прав, Dash/ Bash или FreeBSD? Или, если оба правильные, потому что POSIX позволяет обоим, как сделать это переносимо?