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