2016-07-26 4 views
0

多くのファイルを削除するためにワイルドカードと変数を使用する正しい方法は何ですか?これは、ここで私は、二重引用符内のワイルドカードを持っている"$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"*ワイルドカードで引用符を外すことはできますか?または、別の/より良い方法がありますか?

注:一部におそらく明らかちょうどrefererence用と明確にし、同じことがls例えばのために適用されますls "$dir/data/ffg_per_product/NAME"* | wc -lの場合、ワイルドカードは二重引用符の外側になければなりません。

+0

関連では、答えにもっと多くの文脈があります。 http://stackoverflow.com/questions/10067266/when-to-wrap-quotes-around-a-variable – tripleee

答えて

3

*引用符の外側は、シェルによって一致するファイル名に展開されます。

引用符内の*は引用符で囲まれていません。文字通りそのまま使用されています。単純な*です。

これは正しく、あなたの意図に対応:

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

同じことが まったく同じ論法、あまりにlsコマンドを使用して、他の例のために行きます。

関連する問題