通配符何时应该在双引号内/外



使用通配符和变量删除多个文件的正确方法是什么?这是我的变量"$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,因为通配符必须在双引号之外。

外壳将引号外的*扩展为匹配的文件名。

引号中的*不是展开的,它是按字面意思使用的,只是一个简单的*

这是正确的,符合您的意图:

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

ls命令的另一个示例也是如此,完全相同的推理。

相关内容

  • 没有找到相关文章

最新更新