Является ли globbing особенностью оболочки?
Я прочитал много вопросов и ответов, как этот и этот
Я знаю, что подстановочные знаки расширяются оболочкой перед выполнением команды, и они являются функцией оболочки. Также подстановочные знаки работают с теми командами, которые могут принимать много аргументов. В find . -name *.rb
если у нас есть более одного файла в текущем каталоге find
выдаст нам ошибку, так как find не может принять несколько аргументов, и способы решить эту проблему:
find . -name "*.rb"
find . -name '*.rb'
find . -name \*.rb
Мы избегаем звездочки и предотвращаем расширение оболочкой, но подстановочные знаки - это особенность оболочки; когда мы убегаем, оболочка звездочки не знает о ее значении, и она должна найти файл с именем *.rb
Так как же в этом случае расширяется звездочка?
1 ответ
Да, оболочка понимает *
как все файлы с любыми символами в каталоге и *.rb
как и все файлы с любыми символами и окончанием .rb
и расширяет его как таковой.
find
Сама команда принимает сглаживание.
Если вы не цитируете *
тогда оболочка расширит его до того, как find
Команда видит свой аргумент, поэтому вместо глобуса *.rb
перешел к find
имена всех файлов, соответствующих глобусу в каталоге, будут переданы find
, а также find
будет пытаться интерпретировать их как аргументы, которые, вероятно, приведут к ошибке или, по крайней мере, не к тому, что вы хотите (это будет работать правильно, только если в текущем каталоге нет подходящих файлов)