Является ли 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 будет пытаться интерпретировать их как аргументы, которые, вероятно, приведут к ошибке или, по крайней мере, не к тому, что вы хотите (это будет работать правильно, только если в текущем каталоге нет подходящих файлов)

Другие вопросы по тегам