Використання -
як імені файлу для позначення stdin / stdout - це умова, якою використовується багато програм. Це не особлива властивість імені файлу. Ядро не розпізнається -
як особливе, тому будь-які системні виклики, що посилаються на -
ім'я файлу, будуть використовуватись -
буквально як ім'я файлу.
З перенаправленням bash -
не розпізнається як спеціальне ім'я файлу, тому bash використовуватиме це як буквальне ім'я файлу.
Коли cat
рядок бачить -
як ім'я файлу, він трактує його як синонім stdin. Щоб обійти це, потрібно змінити рядок, який cat
бачить таким чином, щоб він все ще посилався на файл, який називається -
. Звичайний спосіб зробити це - префіксація імені файлу шляхом - ./-
або /home/Tim/-
. Ця методика також використовується для вирішення подібних проблем, коли параметри командного рядка зіштовхуються з іменами файлів, тому файл, згаданий як ./-e
, не відображається, наприклад, як -e
командний рядок для програми.