Действительно ли globbing является функцией оболочки?

Я считал много вопросов и ответов как это и этот

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

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

Мы выходим из звездочки и предотвращаем расширение оболочкой, но подстановочные знаки являются функцией оболочки; то, когда мы выходим из оболочки звездочки, не знает о ее значении, и она должна найти файл названным *.rb, таким образом, как звездочка расширяет в этом случае?

12
задан 13 April 2017 в 05:23

1 ответ

Да, оболочка понимает * как все файлы с любыми символами в каталоге и *.rb как все файлы с любыми символами и заканчивая .rb, и расширяет его как таковой.

Сама команда find принимает глобирование.

Если вы не заключите в кавычку *, то оболочка расширит его до того, как команда find увидит свой аргумент, поэтому вместо глобуса *.rb, переданного find, имена всех файлов, соответствующих глобусу в каталоге, будут переданы find, и find попытается интерпретировать их как аргументы, которые, вероятно, приведут к ошибке или, по крайней мере, не к тому, что вы хотите (это будет работать правильно только если в текущем каталоге нет подходящих файлов)

21
ответ дан 23 November 2019 в 03:34

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

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