Когда подстановочные знаки должны быть внутри / снаружи двойных кавычек?

Как правильно использовать подстановочный знак и переменную для удаления многих файлов? Это моя переменная "$dir"

$ echo "$dir"
/home/path/to/file

Здесь у меня есть подстановочный знак внутри двойных кавычек, но он не работает:

$ rm "$dir/data/ffg_per_product/ffg*"
rm: cannot remove `/home/path/to/file/data/ffg_per_product/ffg*': No such file or directory

Здесь у меня есть подстановочный знак вне двойных кавычек, и это работает:

$ rm "$dir/data/ffg_per_product/ffg"*

И здесь вы можете увидеть файлы были удалены:

$ ls -lth ffg_per_product/ffg* | wc -l
ls: cannot access ffg_per_product/ffg*: No such file or directory
0

Итак, что я хочу знать, правильно ли я использую кавычки для удаления файлов rm "$dir/data/ffg_per_product/ffg"* с подстановочными символами в кавычках? Или есть другой / лучший способ?

ПРИМЕЧАНИЕ: вероятно, очевидно для некоторых, но только для справки и, чтобы быть ясным, то же самое относится к ls например ls "$dir/data/ffg_per_product/NAME"* | wc -l в том, должен ли подстановочный знак быть вне двойных кавычек.

1 ответ

* вне кавычек расширяется оболочкой для соответствия именам файлов.

* внутри кавычек не раскрывается, используется буквально, просто *,

Это правильно и соответствует вашим намерениям:

rm "$dir/data/ffg_per_product/ffg"*

То же самое относится и к вашему другому примеру с ls Команда тоже точно такая же аргументация.

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