Що означає зворотна косою крапкою як команда?


17

Програмне забезпечення, яке я встановив, вставило рядок у свій профіль, що гласить:

[ -s "$SOME_FILE" ] && \. "$SOME_FILE"

Я знаю, що точка .є синонімом source, тому я підозрюю, що це лише пошук файлу, але я ніколи не бачив \.цього; це робить щось інше?

Редагування щодо DV: пошук "зворотної косої точки" призводить до питань щодо ./виклику виконуваних файлів та man sourceпризводить до сторінки, де \.не відображається. Я не знаю, що ще спробувати, звідси і питання.

Редагуйте 2: перегляньте відповідні питання

Відповіді:


31

Зворотний нахил поза лапками означає "інтерпретувати наступний символ буквально під час розбору". Так .як це звичайний символ для синтаксичного \.аналізу, розбирається так само, як .і викликає вбудований .(який sourceє синонімом у bash).

Є один випадок, коли це може змінити ситуацію в цьому контексті. Якщо користувач визначив псевдонім, який називався .раніше .profile, і .profileчитається в оболонці, яка розширює псевдоніми (що bash виконує за замовчуванням лише тоді, коли його викликають інтерактивно), то він .би викликав псевдонім, але \.все-таки запускав би вбудований, оскільки оболонка не намагається розширити псевдонім на слова, які цитуються будь-яким чином.

Я підозрюю, що це .було змінено, \.оскільки користувач скаржився після того, як зробив псевдонім для ..

Зверніть увагу, що \.викликає функцію, яка називається .. Імовірно, користувачі, які пишуть функції, більш обізнані, ніж користувачі, які пишуть псевдоніми, і знають, що переосмислити стандартну команду .profile- це погана ідея, якщо ви збираєтесь включити код від третіх сторін. Але якщо ви хотіли обійти псевдоніми та функції, можете написати command .. Автор цього фрагмента цього не робив, бо піклувався про антикварні оболонки, у яких не було commandвбудованого, або, скоріше, тому, що про нього не знали.

До речі, визначення будь-якого псевдоніму .profile- це погана ідея, оскільки .profileце сценарій ініціалізації сеансу , а не скрипт ініціалізації оболонки . Псевдоніми на баш належать в .bashrc.


9

Значення \."буквальна точка", тобто просто крапка. Він буде прийнятий як стандартна .команда (подібно до sourceв bash).

Стандарт POSIX має про це сказати (мій акцент)

Те, <backslash>що не цитується, повинно зберігати буквальне значення наступного символу , за винятком а <newline>. Якщо <newline>слідує наступне <backslash>, оболонка повинна інтерпретувати це як продовження рядка. І повинні бути видалені перед розщепленням введення в лексеми . Оскільки втік видалено повністю з вхідного сигналу і не замінений жодним пробілом, він не може служити роздільником маркера.<backslash><newline><newline>

Символ крапки може бути псевдонімом:

$ alias .='echo hello'
$ .
hello

це означає, що \.уникнути використання псевдонімічної версії .команди, тому що ,

Після того, як маркер буде розмежований, але перед застосуванням граматичних правил у Граматиці оболонки, отримане слово, яке визначено як слово імені команди простої команди, повинно бути вивчене, щоб визначити, чи це нецитоване дійсне ім'я псевдоніма.


Я шукав офіційне джерело про те, як зворотний кут в слові трактується як цитування і як це запобігає розширенню псевдоніму. Дякую за довідку!
Шельон

1
@Sheljohn Дивіться оновлену відповідь.
Кусалаланда
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.