Баш поводиться дещо нестандартно, коли йдеться про це -.
POSIX говорить:
Настанова 10:
Перший --аргумент, який не є аргументом-опціоном, повинен прийматися як роздільник, що вказує на кінець параметрів. Будь-які наступні аргументи слід розглядати як операнди, навіть якщо вони починаються з -символу.
[…]
Вказівка 13:
Утиліти, які використовують операнди для представлення файлів, відкритих для читання чи запису, -операнд повинен використовуватися для позначення лише стандартного вводу (або стандартного виводу, коли з контексту зрозуміло, що задається вихідний файл) або файл з іменем -.
І
Якщо утиліта, описана в томі Shell and Utilities POSIX.1-2017 як така, що відповідає цим керівництву, вимагає прийняти або не прийняти операнд -для позначення стандартного вводу або виводу, це використання пояснюється в розділі OPERANDS. В іншому випадку, якщо така утиліта використовує операнди для представлення файлів, вона визначається реалізацією, чи -означає операнд стандартний вхід (або стандартний вихід), або файл з ім'ям -.
Але потім man 1 bashчитає:
--Сигналізує про закінчення опцій і відключає опцію подальшої обробки. Будь-які аргументи після цього --трактуються як імена та аргументи. Аргумент -рівносильний --.
Тож для Bash -не означає ні стандартного вводу, ні файлу, отже, дещо нестандартного.
Тепер ваш конкретний випадок:
curl -sL https://rpm.nodesource.com/setup_6.x | sudo -E bash -
Я підозрюю, що автор цієї команди може не усвідомлювати -, що --в цьому випадку рівнозначно . Я підозрюю, що автор хотів переконатися, що bashпрочитає його зі стандартного введення, і, як вони очікували, -буде працювати відповідно до настанови 13.
Але навіть якби це працювало згідно з настановою, тут -було б непотрібно, оскільки він bashвиявляє, коли його стандартним входом є труба, і діє відповідно (якщо -cне вказано тощо).
Але -не працює згідно з настановою, це працює так --. Тут все-таки --непотрібно, оскільки аргументів після цього немає.
На мій погляд, останні -нічого не змінюють. Команда спрацювала б і без неї.
Щоб побачити, як --і як -може бути корисно в цілому, вивчіть приклад нижче.
catв моєму Kubuntu дотримується обох вказівок, і я буду використовувати його для демонстрації корисності -та --.
Нехай файл з назвою fooіснує. Це надрукує файл:
cat foo
Нехай файл з назвою --helpіснує. Цей файл не буде надруковано:
cat --help
Але це буде надрукувати файл з назвою --help:
cat -- --help
Це з'єднає файл, названий --helpтим, що відбувається зі стандартного вводу:
cat -- --help -
Здається, вам насправді не потрібно --, тому що ви завжди можете передати те, ./--helpщо буде інтерпретуватися як файл точно. Але врахуйте
cat "$file"
коли ви заздалегідь не знаєте, що таке зміст змінної. Ви не можете просто ./передбачити його, тому що це може бути абсолютний шлях і ./зламає його. З іншого боку, це може бути файл з назвою --help(бо чому б ні?). У цьому випадку --дуже корисно; це набагато надійніша команда:
cat -- "$file"