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

Как правильно использовать подстановочный знак и переменную для удаления многих файлов? Это моя переменная"$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в этом случае подстановочный знак должен быть вне двойных кавычек.

 tripleee27 июл. 2016 г., 07:21
Связанные, с гораздо большим контекстом в ответах;stackoverflow.com/questions/10067266/...

Ответы на вопрос(1)

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

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

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

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

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

Ваш ответ на вопрос