Чи є глобул особливістю оболонки?


12

Я читав багато запитань та відповідей на кшталт цього та цього

Я знаю, що макіяж розширюється оболонкою перед запуском команди, і вони є особливістю оболонки. Також підстановочні символи працюють з тими командами, які можуть прийняти багато аргументів. У find . -name *.rb разі ми маємо більше одного файлу в поточному каталозі findдасть нам повідомлення про помилку , тому що знахідка не може приймати кілька аргументів і шляхи вирішення цього є:

find . -name "*.rb"
find . -name '*.rb'
find . -name \*.rb

Ми уникаємо зірочки і запобігаємо розширенню оболонки, але макіяж - це особливість оболонки; коли ми уникаємо оболонки зірочки, не знаємо про її значення, і слід знайти файл з назвою *.rb, то як розширюється зірочка в цьому випадку?

Відповіді:


21

Так, оболонка розуміє *як усі файли з будь-якими символами в каталозі і *.rbяк усі файли з будь-якими символами та закінченнями .rbта розширює їх як такі.

Сама findкоманда приймає глобалізацію.

Якщо ви не цитуєте, *тоді оболонка буде розгортати її до того, як findкоманда побачить свій аргумент, тож замість глобуля, *.rbпереданого до find, будуть передані імена всіх файлів, що відповідають глобалу в каталозі find, і findспробують їх інтерпретувати як аргументи, які, ймовірно, призведуть до помилки або, принаймні, не до того, що ви хочете (він буде працювати правильно, лише якщо у поточному каталозі немає відповідних файлів)


дякую, це означає, що ми говоримо, що це не глобус, але деякі команди можуть розширювати символи? чи ми можемо сказати, якщо у нас є оболонка, не розуміючи, чи саме ці команди знають, чи глобалізація може розширити їх?
Сінуш

5
якщо *цитується, оболонка не розширюватиме її, і аргумент, що включає глобус, передається команді, яка може зрозуміти глобус - це те саме для будь-яких команд, які приймають регулярний вираз, який завжди повинен бути цитований ...
Zanna

1
Моє задоволення ^ _ ^
Занна

7
@Sinoosh: Зауважте, що не всі команди розуміють глобальний синтаксис. Це, звичайно, є особливістюfind
slebetman

1
@Sinoosh Find насправді не "розширює" підстановку, вона використовує його як тест для відповідності кожному назви файлу, з яким він стикається. Є (дуже) декілька команд, які розширюють підстановку в звичайному розумінні - unzip і 7z можуть використовувати її для відкриття декількох архівів (коли аргументи, як правило, мають форму " [archive filename single argument] [list of files to extract]"), наприклад.
Випадково832
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.