Примітка: моя відповідь НЕ дійсна у випадку ОП, і стосується лише інструментів, що відповідають конвенції, згаданій нижче, а не у випадку файлу, названого саме просто -
(тире), що часто також є спеціальним випадком для визначення цього читання зі стандартного вхід очікується. Дивіться прийняту відповідь.
Залишаючи це тут, оскільки він містить корисну інформацію для інших випадків, на які можна натрапити, шукаючи відповіді.
Двічі-Даш!
--
Для позначення останнього аргументу використовуйте стандартну умову подвійного тире ( ):
less -- -FILENAME
Приклад
$ echo "meh" > -badname
$ less -badname
Number is required after -b
$ less -- -badname # GREAT SUCCESS!
Whhhaattt?
Цей --
аргумент випливає з конвенції, підтримуваної більшістю реалізацій утиліт оболонок та інструментів командного рядка, і більшість оболонок помітно відстоюють, що слід дотримуватися цього під час реалізації інструментів CLI.
Рекомендовано Відкритою групою
OpenGroup також згадує про це в розділі за замовчуванням опису утиліти (v6) своєї базової специфікації:
Поведінка за замовчуванням: [...] Стандартні утиліти, які не приймають параметри, але приймають операнди, повинні визнавати "-" як перший аргумент, який слід відкинути.
Вимога розпізнавання "-" полягає в тому, що відповідні програми потребують способу захисту своїх операндів від будь-яких довільних варіантів, які реалізація може надавати як розширення. Наприклад, якщо в стандартному foo утиліті вказано, що він не має жодних параметрів, і програмі, необхідній для того, щоб дати йому ім'я шляху з провідним дефісом, він може сміливо робити це як:
foo -- -myfile
і уникати будь-яких проблем із -m, що використовується як розширення.
І в Правилах синтаксису утиліти (v7):
Настанова 10:
Перший - аргумент, який не є параметром-параметром, повинен прийматися як роздільник, що вказує на кінець параметрів. Будь-які наступні аргументи слід розглядати як операнди, навіть якщо вони починаються із символу '-'.
Рекомендовано Башем
Ось витяг із посібника з bash, про його вбудовані компоненти, які його підтримують:
Якщо не зазначено інше, кожна вбудована команда, задокументована в цьому розділі, приймає варіанти, яким передує - приймає - для позначення кінця параметрів.
:, Правда, помилково, і тестові вбудовані не приймають варіанти та не розглядають - спеціально. Вихід, вихід із системи, перерва, продовження, пускання та зміщення вбудованих файлів приймають та обробляють аргументи, починаючи з - не вимагаючи -. Інші вбудовані, які приймають аргументи, але не вказані як прийняття параметрів, інтерпретують аргументи, починаючи з - як недійсні варіанти та вимагаючи - щоб запобігти цій інтерпретації.
Зауважте, що луна не трактує - означає кінець варіантів.
Додаткове читання