Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
788 views
in Technique[技术] by (71.8m points)

bash - When should wildcards be inside / outside double quotes?

What is the correct way to use a wild card and a variable to delete many files? This is my variable "$dir"

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

Here I have the wild card inside the double quotes, but it does not work:

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

Here I have the wildcard outside the double quotes and it works:

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

And here you can see the files were deleted:

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

So what I want to know, is am I using the quotes correctly to delete the files rm "$dir/data/ffg_per_product/ffg"* with the wildcard outise the quotes? Or is there another/better way?

NOTE: probably obvious to some but just for refererence and to be clear, the same applies for ls e.g. ls "$dir/data/ffg_per_product/NAME"* | wc -l, in that, does the wild card have to be outside the double quotes.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

A * outside of quotes is expanded by the shell to matching filenames.

A * inside quotes is not expanded, it is used literally, just a simple *.

This is correct and corresponds to your intention:

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

The same goes for your other example with the ls command too, exactly the same reasoning.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...