Почему не делает “комнаты *”, работают, когда существуют файлы, которые начинаются с дефиса?

Я испытываю недостаток в подробной технической экспертизе для резервного копирования этого ответа, но мой опыт показывает, что Linux масштабируется хорошо по сравнению с другими операционными системами, которые я часто использую (прежде всего, Windows). Таким образом, возможно, вопрос состоит в том, почему Windows не масштабируется, а также Linux.

При повторном заявлении о вопросе тот путь все еще полезен для Вас, я предложил бы, чтобы рыночные силы заставили Microsoft добавлять опции, и функциональность связала с последними и самыми способными аппаратными средствами, потому что они продают больше копий операционной системы, прежде всего, когда конечные пользователи покупают новые системы. Так, в любом моменте времени я нахожу, что последний релиз Windows работает плохо на более старых, менее способных аппаратных средствах.

Простите мне, если это упрощает Ваш вопрос.

5
27.09.2011, 11:10
2 ответа

Это не удаляет их, потому что это распознает имена файлов как аргументы (закрыл кавычки, в этой ситуации * расширяется до -f -i ize). Для удаления этих файлов любой делает rm -- *, или rm ./*. -- показывает конец аргументов, ./ использует ссылку на текущий каталог для хитрости rmобнаружение аргумента.

Обычно ./* предпочтительно, поскольку некоторые программы не принимают -- прекратить проверять на аргументы.

Это не ошибка. Это - что-то, что должно быть обработано путем вызова rm корректным способом избежать таких проблем.

16
27.01.2020, 20:31
  • 1
    "как некоторые программы не принимает -- прекратить проверять на аргументы" и другие программы кроме единственного тире с этой целью. –  dmckee --- ex-moderator kitten 20.09.2011, 21:57
  • 2
    @dmckee некоторые другие программы делает, не все. –  Chris Down 20.09.2011, 22:21
  • 3
    Это не ошибка, Вы правы. Но я назвал бы это недостатком дизайна, поскольку это показывает хрупкость оболочек, не различающих вещи, которые должны быть взяты буквально (имена файлов) и вещи, которые должны быть интерпретированы (переключается). Путем большинство языков программирования работает (строковые литералы находятся в кавычках, все остальное интерпретируется), кажется, намного лучший дизайн. Конечно, можно всегда использовать кавычки, но оболочки Unix не были разработаны на основе идеи, что мы будем всегда использовать кавычки. Как раз наоборот. –  iconoclast 13.06.2012, 06:19

Только для добавления небольшого количества ясности, "*" расширяется оболочкой, не 'комнатой', таким образом, команда 'комнаты' просто получает список файлов как аргументы. Таким образом в Вашем примере 'комната *' точно эквивалентна вводу 'комнаты-f-i ize'.

В других системах (например, строка Windows/команды DOS) "*" расширен до списка файлов самой командой, таким образом, команда 'знает', что все файлы соответствия являются файлами. Оборотная сторона того подхода - то, что каждая команда должна реализовать globbing и повторно реализовать globbing конфигурацию и заключающие в кавычки правила и т.д.

4
27.01.2020, 20:31
  • 1
    "Оборотная сторона того подхода - то, что каждая команда должна реализовать globbing и повторно реализовать globbing конфигурацию и заключающие в кавычки правила, и т.д." хорошо, это могла быть часть библиотеки. Это - действительно исторический артефакт, что UNIX не имел способности совместно использовать что-либо кроме ядра, таким образом, было лучше иметь его в одном процессе, а не в библиотеке, связанной каждой программой. Принимая во внимание, что в DOS это было частью "блоба библиотеки/ядра", который был обработчиками прерываний DOS. –  Random832 27.09.2011, 16:25

Теги

Похожие вопросы